From Paul van der Zwan
[deb_libnfs.git] / lib / libnfs.c
index 4b63a704ec9faf911bf5d1d407a7d61fd1bee240..905e9d80656ca99e38c567d50da6211a70f7a3b7 100644 (file)
@@ -646,6 +646,9 @@ static void nfs_stat_1_cb(struct rpc_context *rpc _U_, int status, void *command
         st.st_dev     = -1;
         st.st_ino     = res->GETATTR3res_u.resok.obj_attributes.fileid;
         st.st_mode    = res->GETATTR3res_u.resok.obj_attributes.mode;
+       if (res->GETATTR3res_u.resok.obj_attributes.type == NF3DIR) {
+               st.st_mode |= S_IFDIR ;
+       }
         st.st_nlink   = res->GETATTR3res_u.resok.obj_attributes.nlink;
         st.st_uid     = res->GETATTR3res_u.resok.obj_attributes.uid;
         st.st_gid     = res->GETATTR3res_u.resok.obj_attributes.gid;
@@ -857,7 +860,7 @@ static void nfs_pread_mcb(struct rpc_context *rpc _U_, int status, void *command
                        rpc_set_error(nfs->rpc, "NFS: Read failed with %s(%d)", nfsstat3_to_str(res->status), nfsstat3_to_errno(res->status));
                        data->error = 1;
                } else {
-                       memcpy(&data->buffer[mdata->offset], res->READ3res_u.resok.data.data_val, res->READ3res_u.resok.count);
+                       memcpy(&data->buffer[mdata->offset - data->start_offset], res->READ3res_u.resok.data.data_val, res->READ3res_u.resok.count);
                        if ((unsigned)data->max_offset < mdata->offset + res->READ3res_u.resok.count) {
                                data->max_offset = mdata->offset + res->READ3res_u.resok.count;
                        }
@@ -870,7 +873,6 @@ static void nfs_pread_mcb(struct rpc_context *rpc _U_, int status, void *command
                return;
        }
 
-
        if (data->error != 0) {
                data->cb(-EFAULT, nfs, command_data, data->private_data);
                free_nfs_cb_data(data);
@@ -948,7 +950,6 @@ int nfs_pread_async(struct nfs_context *nfs, struct nfsfh *nfsfh, off_t offset,
                mdata->data   = data;
                mdata->offset = offset;
                mdata->count  = readcount;
-
                if (rpc_nfs_read_async(nfs->rpc, nfs_pread_mcb, &nfsfh->fh, offset, readcount, mdata) != 0) {
                        rpc_set_error(nfs->rpc, "RPC error: Failed to send READ call for %s", data->path);
                        data->cb(-ENOMEM, nfs, rpc_get_error(nfs->rpc), data->private_data);
@@ -3035,3 +3036,8 @@ int mount_getexports_async(struct rpc_context *rpc, const char *server, rpc_cb c
        return 0;
 }
 
+struct rpc_context *nfs_get_rpc_context(struct nfs_context *nfs)
+{
+       return nfs->rpc;
+}
+