strncpy ((char *)&msg.cache_handle, tmp, 4);  msg.node.tokens = res.tokens;
msg.node.tokens = res.tokens; msg.flag = XFS_INVALID_DNLC;
xfs_message_getdata (int fd, struct xfs_message_getdata *h, u_int size){     struct xfs_message_installdata msg;     VenusFid *fid;     VenusFid real_fid;     Result res;     AFSFetchStatus status;     char tmp[5];     CredCacheEntry *ce;     int ret;     AccessEntry *ae;     struct xfs_message_header *h0 = NULL;     size_t h0_len = 0;     fid = (VenusFid *)&h->handle;     ce = cred_get (fid->Cell, h->cred.pag, CRED_ANY);     assert (ce != NULL);     res = cm_getattr (*fid, &status, &real_fid, ce, &ae);     if (res.res == 0) {	  fcacheentry2xfsnode (fid, &real_fid, &status, &msg.node, ae);	  if (status.FileType == TYPE_DIR) {	       FCacheEntry *entry;	       ret = fcache_get (&entry, *fid, ce);	       if (ret)		   goto out;	       ret = fcache_get_data (entry, ce);	       if (ret) {		   ReleaseWriteLock (&entry->lock);		   goto out;	       }	       res = conv_dir (entry, tmp, sizeof(tmp), ce, h->tokens);	       if (res.res != -1) {		    strncpy ((char *)&msg.cache_handle, tmp, 4); /* XXX */		    msg.node.tokens = res.tokens;	       }	       ReleaseWriteLock(&entry->lock);	  } else {	       res = cm_open (*fid, ce, h->tokens);	       if (res.res != -1) {		    sprintf (tmp, "%04X", res.res);         /* XXX */		    strncpy ((char *)&msg.cache_handle, tmp, 4);  /* XXX */		    msg.node.tokens = res.tokens;	       }	  }     }     if (res.res != -1) {	 msg.header.opcode = XFS_MSG_INSTALLDATA;	 h0 = (struct xfs_message_header *)&msg;	 h0_len = sizeof(msg);     }     if (res.res == -1) {	 ret = res.error;	 if (ret == RXKADEXPIRED) {	     cred_expire (ce);	     cred_free (ce);	     return xfs_message_getdata (fd, h, size);	 }     } else	 ret = 0;out:     cred_free (ce);     xfs_send_message_wakeup_multiple (fd,				       h->header.sequence_num,				       ret,				       h0, h0_len,				       NULL, 0);     return ret;}