r8637: added sys.stat() and sys.lstat() calls
authorAndrew Tridgell <tridge@samba.org>
Wed, 20 Jul 2005 07:01:09 +0000 (07:01 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:29:48 +0000 (13:29 -0500)
(This used to be commit 5dbdf4fb3317964541339615b7ecbf174a2dc00b)

source4/scripting/ejs/smbcalls_sys.c

index 61b89843dcf69372f3e49c5502fa2348b1434266..3f1f4b0734e65a271078204194c74bb312851ffe 100644 (file)
@@ -188,6 +188,75 @@ 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
 */
@@ -204,6 +273,8 @@ static int ejs_sys_init(MprVarHandle eid, int argc, struct MprVar **argv)
        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;
 }