r7924: Add mkdir() and rmdir() functions.
authorTim Potter <tpot@samba.org>
Sun, 26 Jun 2005 05:43:16 +0000 (05:43 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:18:51 +0000 (13:18 -0500)
Write a macro to check tree handle parameters.
(This used to be commit 043feb131f1877886a9ab7e25ada5e54692f6487)

source4/scripting/ejs/smbcalls_cli.c

index 7a693fc180e1f6e8025db1532f1679358f03c0cf..46813f8f238c42030728547e573683f1cc0e1aca 100644 (file)
@@ -449,6 +449,9 @@ static int ejs_tree_connect(MprVarHandle eid, int argc, char **argv)
        return 0;
 }
 
+#define IS_TREE_HANDLE(x) (mprVarIsPtr((x)->type) && \
+                           talloc_check_name((x)->ptr, "struct smbcli_tree"))
+
 /* Perform a tree disconnect:
 
      tree_disconnect(tree_handle);
@@ -459,8 +462,13 @@ static int ejs_tree_disconnect(MprVarHandle eid, int argc, MprVar **argv)
        struct smbcli_tree *tree;
        NTSTATUS result;
 
-       if (!mprVarIsPtr(argv[0]->type) || 
-           !talloc_check_name(argv[0]->ptr, "struct smbcli_tree")) {
+       if (argc != 1) {
+               ejsSetErrorMsg(eid, 
+                              "tree_disconnect(): invalid number of args");
+               return -1;
+       }
+
+       if (!IS_TREE_HANDLE(argv[0])) {
                ejsSetErrorMsg(eid, "first arg is not a tree handle");
                return -1;
        }
@@ -474,6 +482,74 @@ static int ejs_tree_disconnect(MprVarHandle eid, int argc, MprVar **argv)
        return 0;
 }
 
+/* Perform a tree connect:
+
+     result = mkdir(tree_handle, DIRNAME);
+ */
+
+static int ejs_mkdir(MprVarHandle eid, int argc, MprVar **argv)
+{
+       struct smbcli_tree *tree;
+       NTSTATUS result;
+
+       if (argc != 2) {
+               ejsSetErrorMsg(eid, "mkdir(): invalid number of args");
+               return -1;
+       }
+
+       if (!IS_TREE_HANDLE(argv[0])) {
+               ejsSetErrorMsg(eid, "first arg is not a tree handle");
+               return -1;
+       }
+
+       tree = argv[0]->ptr;
+
+       if (!mprVarIsString(argv[1]->type)) {
+               ejsSetErrorMsg(eid, "arg 2 must be a string");
+               return -1;
+       }
+
+       result = smbcli_mkdir(tree, argv[1]->string);
+
+       ejsSetReturnValue(eid, mprNTSTATUS(result));
+
+       return 0;
+}
+
+/* Perform a tree connect:
+
+     result = rmdir(tree_handle, DIRNAME);
+ */
+
+static int ejs_rmdir(MprVarHandle eid, int argc, MprVar **argv)
+{
+       struct smbcli_tree *tree;
+       NTSTATUS result;
+
+       if (argc != 2) {
+               ejsSetErrorMsg(eid, "rmdir(): invalid number of args");
+               return -1;
+       }
+
+       if (!IS_TREE_HANDLE(argv[0])) {
+               ejsSetErrorMsg(eid, "first arg is not a tree handle");
+               return -1;
+       }
+
+       tree = argv[0]->ptr;
+
+       if (!mprVarIsString(argv[1]->type)) {
+               ejsSetErrorMsg(eid, "arg 2 must be a string");
+               return -1;
+       }
+       
+       result = smbcli_rmdir(tree, argv[1]->string);
+
+       ejsSetReturnValue(eid, mprNTSTATUS(result));
+
+       return 0;
+}
+
 /*
   setup C functions that be called from ejs
 */
@@ -482,6 +558,9 @@ void smb_setup_ejs_cli(void)
        ejsDefineStringCFunction(-1, "tree_connect", ejs_tree_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
        ejsDefineCFunction(-1, "tree_disconnect", ejs_tree_disconnect, NULL, MPR_VAR_SCRIPT_HANDLE);
 
+       ejsDefineCFunction(-1, "mkdir", ejs_mkdir, NULL, MPR_VAR_SCRIPT_HANDLE);
+       ejsDefineCFunction(-1, "rmdir", ejs_rmdir, NULL, MPR_VAR_SCRIPT_HANDLE);
+
 #if 0
        ejsDefineStringCFunction(-1, "connect", ejs_cli_connect, NULL, MPR_VAR_SCRIPT_HANDLE);
        ejsDefineCFunction(-1, "session_setup", ejs_cli_ssetup, NULL, MPR_VAR_SCRIPT_HANDLE);