4545#ifdef HAVE_SYS_SYSINFO_H
4646#include <sys/sysinfo.h>
4747#endif
48+ #ifdef HAVE_SYS_STAT_H
49+ #include <sys/stat.h>
50+ #endif
4851
4952static void Jim_PosixSetError (Jim_Interp * interp )
5053{
@@ -118,6 +121,25 @@ static int Jim_PosixUptimeCommand(Jim_Interp *interp, int argc, Jim_Obj *const *
118121#endif
119122 return JIM_OK ;
120123}
124+
125+ static int Jim_PosixUmaskCommand (Jim_Interp * interp , int argc , Jim_Obj * const * argv )
126+ {
127+ mode_t oldmask ;
128+
129+ if (argc == 2 ) {
130+ long mask ;
131+ if (Jim_GetLong (interp , argv [1 ], & mask ) != JIM_OK ) {
132+ return JIM_ERR ;
133+ }
134+ oldmask = umask (mask );
135+ }
136+ else {
137+ oldmask = umask (0 );
138+ umask (oldmask );
139+ }
140+ Jim_SetResultInt (interp , oldmask );
141+ return JIM_OK ;
142+ }
121143#endif /* JIM_BOOTSTRAP */
122144
123145int Jim_posixInit (Jim_Interp * interp )
@@ -130,6 +152,7 @@ int Jim_posixInit(Jim_Interp *interp)
130152 Jim_RegisterSimpleCmd (interp , "os.gethostname" , "" , 0 , 0 , Jim_PosixGethostnameCommand );
131153 Jim_RegisterSimpleCmd (interp , "os.getids" , "" , 0 , 0 , Jim_PosixGetidsCommand );
132154 Jim_RegisterSimpleCmd (interp , "os.uptime" , "" , 0 , 0 , Jim_PosixUptimeCommand );
155+ Jim_RegisterSimpleCmd (interp , "os.umask" , "?newmask?" , 0 , 1 , Jim_PosixUmaskCommand );
133156#endif /* JIM_BOOTSTRAP */
134157 return JIM_OK ;
135158}
0 commit comments