r9813: Conver testsuite for samba3sam module to EJS
[ira/wip.git] / source4 / scripting / ejs / smbcalls_sys.c
index 4dc5045ff6ba2ee53bc62764a1e9c0ed10469961..f32605c3d57d81b299be16496f3a722d78fceafb 100644 (file)
@@ -117,9 +117,27 @@ static int ejs_sys_ldaptime(MprVarHandle eid, int argc, struct MprVar **argv)
        return 0;
 }
 
+/*
+  return a http time string from a nttime
+*/
+static int ejs_sys_httptime(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+       char *s;
+       time_t t;
+       if (argc != 1 || !mprVarIsNumber(argv[0]->type)) {
+               ejsSetErrorMsg(eid, "sys_httptime invalid arguments");
+               return -1;
+       }
+       t = nt_time_to_unix(mprVarToNumber(argv[0]));
+       s = http_timestring(mprMemCtx(), t);
+       mpr_Return(eid, mprString(s));
+       talloc_free(s);
+       return 0;
+}
+
 /*
   unlink a file
-   ok = unlink(fname);
+   ok = sys.unlink(fname);
 */
 static int ejs_sys_unlink(MprVarHandle eid, int argc, char **argv)
 {
@@ -136,7 +154,7 @@ static int ejs_sys_unlink(MprVarHandle eid, int argc, char **argv)
 /*
   load a file as a string
   usage:
-     string = sys_file_load(filename);
+     string = sys.file_load(filename);
 */
 static int ejs_sys_file_load(MprVarHandle eid, int argc, char **argv)
 {
@@ -155,7 +173,7 @@ static int ejs_sys_file_load(MprVarHandle eid, int argc, char **argv)
 /*
   save a file from a string
   usage:
-     ok = sys_file_save(filename, str);
+     ok = sys.file_save(filename, str);
 */
 static int ejs_sys_file_save(MprVarHandle eid, int argc, char **argv)
 {
@@ -170,17 +188,102 @@ static int ejs_sys_file_save(MprVarHandle eid, int argc, char **argv)
 }
 
 
+/*
+  return fields of a stat() call
+*/
+static struct MprVar mpr_stat(struct stat *st)
+{
+       struct MprVar ret;
+       ret = mprObject("stat");
+
+#define ST_EL(n) mprSetVar(&ret, #n, mprCreateNumberVar(st->n))
+       ST_EL(st_dev);
+       ST_EL(st_ino);
+       ST_EL(st_mode);
+       ST_EL(st_nlink);
+       ST_EL(st_uid);
+       ST_EL(st_gid);
+       ST_EL(st_rdev);
+       ST_EL(st_size);
+       ST_EL(st_blksize);
+       ST_EL(st_blocks);
+       ST_EL(st_atime);
+       ST_EL(st_mtime);
+       ST_EL(st_ctime);
+
+       return ret;
+}
+
+/*
+  usage:
+      var st = sys.stat(filename);
+  returns an object containing struct stat elements
+*/
+static int ejs_sys_stat(MprVarHandle eid, int argc, char **argv)
+{
+       struct stat st;
+       /* validate arguments */
+       if (argc != 1) {
+               ejsSetErrorMsg(eid, "sys.stat invalid arguments");
+               return -1;
+       }
+       if (stat(argv[0], &st) != 0) {
+               mpr_Return(eid, mprCreateUndefinedVar());
+       } else {
+               mpr_Return(eid, mpr_stat(&st));
+       }
+       return 0;
+}
+
+/*
+  usage:
+      var st = sys.lstat(filename);
+  returns an object containing struct stat elements
+*/
+static int ejs_sys_lstat(MprVarHandle eid, int argc, char **argv)
+{
+       struct stat st;
+       /* validate arguments */
+       if (argc != 1) {
+               ejsSetErrorMsg(eid, "sys.stat invalid arguments");
+               return -1;
+       }
+       if (lstat(argv[0], &st) != 0) {
+               mpr_Return(eid, mprCreateUndefinedVar());
+       } else {
+               mpr_Return(eid, mpr_stat(&st));
+       }
+       return 0;
+}
+
+
+/*
+  initialise sys ejs subsystem
+*/
+static int ejs_sys_init(MprVarHandle eid, int argc, struct MprVar **argv)
+{
+       struct MprVar *obj = mprInitObject(eid, "sys", argc, argv);
+
+       mprSetCFunction(obj, "interfaces", ejs_sys_interfaces);
+       mprSetCFunction(obj, "hostname", ejs_sys_hostname);
+       mprSetCFunction(obj, "nttime", ejs_sys_nttime);
+       mprSetCFunction(obj, "gmtime", ejs_sys_gmtime);
+       mprSetCFunction(obj, "ldaptime", ejs_sys_ldaptime);
+       mprSetCFunction(obj, "httptime", ejs_sys_httptime);
+       mprSetStringCFunction(obj, "unlink", ejs_sys_unlink);
+       mprSetStringCFunction(obj, "file_load", ejs_sys_file_load);
+       mprSetStringCFunction(obj, "file_save", ejs_sys_file_save);
+       mprSetStringCFunction(obj, "stat", ejs_sys_stat);
+       mprSetStringCFunction(obj, "lstat", ejs_sys_lstat);
+
+       return 0;
+}
+
+
 /*
   setup C functions that be called from ejs
 */
 void smb_setup_ejs_system(void)
 {
-       ejsDefineCFunction(-1, "sys_interfaces", ejs_sys_interfaces, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineCFunction(-1, "sys_hostname", ejs_sys_hostname, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineCFunction(-1, "sys_nttime", ejs_sys_nttime, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineCFunction(-1, "sys_gmtime", ejs_sys_gmtime, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineCFunction(-1, "sys_ldaptime", ejs_sys_ldaptime, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineStringCFunction(-1, "sys_unlink", ejs_sys_unlink, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineStringCFunction(-1, "sys_file_load", ejs_sys_file_load, NULL, MPR_VAR_SCRIPT_HANDLE);
-       ejsDefineStringCFunction(-1, "sys_file_save", ejs_sys_file_save, NULL, MPR_VAR_SCRIPT_HANDLE);
+       ejsDefineCFunction(-1, "sys_init", ejs_sys_init, NULL, MPR_VAR_SCRIPT_HANDLE);
 }