fix crash in mount/export
[deb_libnfs.git] / lib / libnfs-sync.c
index cef644475f296f2c55719e64a8fcbbe91332dbb4..4c8ba76a5139eb2e66351498fdc992a55cda8990 100644 (file)
@@ -1069,16 +1069,20 @@ int nfs_link(struct nfs_context *nfs, const char *oldpath, const char *newpath)
        return cb_data.status;
 }
 
-void mount_getexports_cb(struct rpc_context *mount_context _U_, int status, void *data, void *private_data)
+void mount_getexports_cb(struct rpc_context *mount_context, int status, void *data, void *private_data)
 {
        struct sync_cb_data *cb_data = private_data;
        exports export = *(exports *)data;
 
-       printf("got exports back\n");
        cb_data->is_finished = 1;
        cb_data->status = status;
        cb_data->return_data = NULL;
 
+       if (status != 0) {
+               rpc_set_error(mount_context, "mount/export call failed with \"%s\"", (char *)data);
+               return;
+       }
+
        while (export != NULL) {
                exports new_export;
 
@@ -1093,19 +1097,23 @@ void mount_getexports_cb(struct rpc_context *mount_context _U_, int status, void
        }
 }
 
-struct exportnode *mount_getexports(struct rpc_context *rpc, const char *server)
+struct exportnode *mount_getexports(const char *server)
 {
        struct sync_cb_data cb_data;
+       struct rpc_context *rpc;
+
 
        cb_data.is_finished = 0;
        cb_data.return_data = NULL;
 
+       rpc = rpc_init_context();
        if (mount_getexports_async(rpc, server, mount_getexports_cb, &cb_data) != 0) {
-               rpc_set_error(rpc, "mount_getexports_async failed");
+               rpc_destroy_context(rpc);
                return NULL;
        }
 
        wait_for_reply(rpc, &cb_data);
+       rpc_destroy_context(rpc);
 
        return cb_data.return_data;
 }