diff options
author | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2011-03-03 13:34:46 -0300 |
---|---|---|
committer | Roberto Ierusalimschy <roberto@inf.puc-rio.br> | 2011-03-03 13:34:46 -0300 |
commit | d806710ab5622487159f2a8aecf72003d831542b (patch) | |
tree | 0a2c49e7ee732f17002ed086420f51ca7f42b221 /loslib.c | |
parent | e049abb69a45e06ca5769a3956a0ba36a959d29e (diff) | |
download | lua-d806710ab5622487159f2a8aecf72003d831542b.tar.gz lua-d806710ab5622487159f2a8aecf72003d831542b.tar.bz2 lua-d806710ab5622487159f2a8aecf72003d831542b.zip |
returns for file-related functions and process-related functions
unified in 'auxlib'
Diffstat (limited to 'loslib.c')
-rw-r--r-- | loslib.c | 29 |
1 files changed, 10 insertions, 19 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: loslib.c,v 1.32 2010/10/05 12:18:03 roberto Exp roberto $ | 2 | ** $Id: loslib.c,v 1.33 2011/01/26 16:30:02 roberto Exp roberto $ |
3 | ** Standard Operating System library | 3 | ** Standard Operating System library |
4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
5 | */ | 5 | */ |
@@ -59,37 +59,28 @@ | |||
59 | 59 | ||
60 | 60 | ||
61 | 61 | ||
62 | static int os_pushresult (lua_State *L, int i, const char *filename) { | 62 | static int os_execute (lua_State *L) { |
63 | int en = errno; /* calls to Lua API may change this value */ | 63 | const char *cmd = luaL_optstring(L, 1, NULL); |
64 | if (i) { | 64 | int stat = system(cmd); |
65 | lua_pushboolean(L, 1); | 65 | if (cmd != NULL) |
66 | return 1; | 66 | return luaL_execresult(L, stat); |
67 | } | ||
68 | else { | 67 | else { |
69 | lua_pushnil(L); | 68 | lua_pushboolean(L, stat); /* true if there is a shell */ |
70 | lua_pushfstring(L, "%s: %s", filename, strerror(en)); | 69 | return 1; |
71 | lua_pushinteger(L, en); | ||
72 | return 3; | ||
73 | } | 70 | } |
74 | } | 71 | } |
75 | 72 | ||
76 | 73 | ||
77 | static int os_execute (lua_State *L) { | ||
78 | lua_pushinteger(L, system(luaL_optstring(L, 1, NULL))); | ||
79 | return 1; | ||
80 | } | ||
81 | |||
82 | |||
83 | static int os_remove (lua_State *L) { | 74 | static int os_remove (lua_State *L) { |
84 | const char *filename = luaL_checkstring(L, 1); | 75 | const char *filename = luaL_checkstring(L, 1); |
85 | return os_pushresult(L, remove(filename) == 0, filename); | 76 | return luaL_fileresult(L, remove(filename) == 0, filename); |
86 | } | 77 | } |
87 | 78 | ||
88 | 79 | ||
89 | static int os_rename (lua_State *L) { | 80 | static int os_rename (lua_State *L) { |
90 | const char *fromname = luaL_checkstring(L, 1); | 81 | const char *fromname = luaL_checkstring(L, 1); |
91 | const char *toname = luaL_checkstring(L, 2); | 82 | const char *toname = luaL_checkstring(L, 2); |
92 | return os_pushresult(L, rename(fromname, toname) == 0, fromname); | 83 | return luaL_fileresult(L, rename(fromname, toname) == 0, fromname); |
93 | } | 84 | } |
94 | 85 | ||
95 | 86 | ||