/*** Terminate the calling process. @function _exit @int status process exit status @see _exit(2) */ static int P_exit(lua_State *L) { pid_t ret = checkint(L, 1); checknargs(L, 1); _exit(ret); return 0; /* Avoid a compiler warning (or possibly cause one if the compiler's too clever, sigh). */ }
int luaL_getn (lua_State *L, int t) { int n; t = abs_index(L, t); lua_pushliteral(L, "n"); /* try t.n */ lua_rawget(L, t); if ((n = checkint(L, 1)) >= 0) return n; getsizes(L); /* else try sizes[t] */ lua_pushvalue(L, t); lua_rawget(L, -2); if ((n = checkint(L, 2)) >= 0) return n; for (n = 1; ; n++) { /* else must count elements */ lua_rawgeti(L, t, n); if (lua_isnil(L, -1)) break; lua_pop(L, 1); } lua_pop(L, 1); return n - 1; }
/*** Fetch the label for a soft label key. @function slk_label @int labnum @treturn string current label for *labnum* @see slk_label(3x) */ static int Pslk_label(lua_State *L) { int labnum = checkint(L, 1); #if LCURSES_POSIX_COMPLIANT return pushstringresult(slk_label(labnum)); #else return binding_notimplemented(L, "slk_label", "curses"); #endif }
/*** Initialise the soft label keys area. This must be called before @{initscr}. @function slk_init @int fmt @treturn bool `true`, if successful @see slk_init(3x) */ static int Pslk_init(lua_State *L) { int fmt = checkint(L, 1); #if LCURSES_POSIX_COMPLIANT return pushokresult(slk_init(fmt)); #else return binding_notimplemented(L, "slk_init", "curses"); #endif }
/*** Change the visibility of the cursor. @function curs_set @int vis one of `0` (invisible), `1` (visible) or `2` (very visible) @treturn[1] int previous cursor state @return[2] nil if *vis* is not supported @see curs_set(3x) */ static int Pcurs_set(lua_State *L) { int vis = checkint(L, 1); int state = curs_set(vis); if (state == ERR) return 0; return pushintresult(state); }
/*** Send a message from a socket. @function send @int fd socket descriptor to act on @string buffer message bytes to send @treturn[1] int number of bytes sent, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see send(2) */ static int Psend(lua_State *L) { int fd = checkint (L, 1); size_t len; const char *buf = luaL_checklstring(L, 2, &len); checknargs(L, 2); return pushresult(L, send(fd, buf, len, 0), "send"); }
/*** Read a clock. @function clock_gettime @int clk name of clock, one of `CLOCK_REALTIME`, `CLOCK_PROCESS_CPUTIME_ID`, `CLOCK_MONOTONIC` or `CLOCK_THREAD_CPUTIME_ID` @treturn[1] PosixTimespec current value of *clk*, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see clock_gettime(3) */ static int Pclock_gettime(lua_State *L) { struct timespec ts; int clk = checkint(L, 1); checknargs(L, 1); if (clock_gettime(clk, &ts) == -1) return pusherror(L, "clock_gettime"); return pushtimespec(L, &ts); }
/*** Convert epoch time value to a broken-down local time. @function localtime @int t seconds since epoch @treturn PosixTm broken-down time @see localtime(3) @see mktime */ static int Plocaltime(lua_State *L) { struct tm t; time_t epoch = checkint(L, 1); checknargs(L, 1); if (localtime_r(&epoch, &t) == NULL) return pusherror(L, "localtime"); return pushtm(L, &t); }
/*** Find the precision of a clock. @function clock_getres @int clk name of clock, one of `CLOCK_REALTIME`, `CLOCK_PROCESS_CPUTIME_ID`, `CLOCK_MONOTONIC` or `CLOCK_THREAD_CPUTIME_ID` @treturn[1] PosixTimespec resolution of *clk*, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see clock_getres(3) */ static int Pclock_getres(lua_State *L) { struct timespec resolution; int clk = checkint(L, 1); checknargs(L, 1); if (clock_getres(clk, &resolution) == -1) return pusherror(L, "clock_getres"); return pushtimespec(L, &resolution); }
/*** Bitwise OR of all (or selected) video attributes supported by the terminal. @function termattrs @int[opt] a terminal attribute bits @treturn[1] bool `true`, if the terminal supports attribute *a* @treturn[2] int bitarray of supported terminal attributes @see termattrs(3x) */ static int Ptermattrs(lua_State *L) { if (lua_gettop(L) > 0) { int a = checkint(L, 1); return pushboolresult(termattrs() & a); } return pushintresult(termattrs()); }
static chtype checkch(lua_State *L, int narg) { if (lua_isnumber(L, narg)) return (chtype)checkint(L, narg); if (lua_isstring(L, narg)) return *lua_tostring(L, narg); return argtypeerror(L, narg, "int or char"); }
/*** Create a Lua file object from a file descriptor. @function fdopen @tparam int fd file descriptor @tparam string mode the mode in which to open the file descriptor @treturn[1] file file Lua file object *fd*, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @usage local fdopen = require "posix.stdio".fdopen local STDOUT_FILENO = require "posix.unistd".STDOUT_FILENO stdout = fdopen (STDOUT_FILENO, "w") */ static int Pfdopen(lua_State *L) /** fdopen(fd, mode) */ { int fd = checkint(L, 1); const char *mode = luaL_checkstring(L, 2); checknargs(L, 2); if (!pushfile(L, fd, mode)) return pusherror(L, "fdopen"); return 1; }
static int l_sqlite3_column_info(lua_State * L, const char * (*info_func)(sqlite3_stmt*,int) ) { const char * info = info_func(checkstmt_stmt(L, 1), checkint(L, 2)); if (info) lua_pushstring(L, info); else lua_pushstring(L, ""); return 1; }
/*** Get the name of a slave pseudo-terminal @function ptsname @int fd descriptor returned by @{openpt} @return[1] path name of the slave terminal device, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see ptsname(3) @see grantpt @see unlockpt */ static int Pptsname(lua_State *L) { int fd=checkint(L, 1); const char* slave; checknargs(L, 1); slave = ptsname(fd); if (!slave) return pusherror(L, "getptsname"); return pushstringresult(slave); }
/*** Initiate a connection on a socket. @function connect @int fd socket descriptor to act on @tparam sockaddr addr socket address @treturn[1] int `0`, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see connect(2) */ static int Pconnect(lua_State *L) { struct sockaddr_storage sa; socklen_t salen; int fd = checkint(L, 1); checknargs (L, 2); if (sockaddr_from_lua(L, 2, &sa, &salen) != 0) return pusherror(L, "not a valid IPv4 dotted-decimal or IPv6 address string"); return pushresult(L, connect(fd, (struct sockaddr *)&sa, salen), "connect"); }
/*** Read bytes from a file. @function read @int fd the file descriptor to act on @int count maximum number of bytes to read @treturn[1] string string from *fd* with at most *count* bytes, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see read(2) */ static int Pread(lua_State *L) { int fd = checkint(L, 1); int count = checkint(L, 2), ret; void *ud, *buf; lua_Alloc lalloc; checknargs(L, 2); lalloc = lua_getallocf(L, &ud); /* Reset errno in case lalloc doesn't set it */ errno = 0; if ((buf = lalloc(ud, NULL, 0, count)) == NULL && count > 0) return pusherror(L, "lalloc"); ret = read(fd, buf, count); if (ret >= 0) lua_pushlstring(L, buf, ret); lalloc(ud, buf, count, 0); return (ret < 0) ? pusherror(L, NULL) : 1; }
/*** Fetch group with given group id. @function getgrgid @int gid group id @treturn PosixGroup group record for *gid* @usage local grp = require "posix.grp" t = grp.getgrgid (0) */ static int Pgetgrgid(lua_State *L) { gid_t gid = (gid_t) checkint(L, 1); struct group *g; checknargs(L, 1); errno = 0; /* so we can recognise a successful empty result */ g = getgrgid(gid); if (!g && errno != 0) return pusherror(L, "getgrgid"); return pushgroup(L, g); }
/*** Fetch password entry with given user id. @function getpwuid @int uid user id @treturn PosixPasswd passwd record for *uid* @usage local pwd = require "posix.pwd" t = pwd.getpwuid (0) */ static int Pgetpwuid(lua_State *L) { uid_t uid = (uid_t) checkint(L, 1); struct passwd *p; checknargs(L, 1); errno = 0; /* so we can recognise a successful empty result */ p = getpwuid(uid); if (!p && errno != 0) return pusherror(L, "getpwuid"); return pushpasswd(L, p); }
static int CvBGCodeBookModel_nmodMax(lua_State *L) { const char f_msg[]=CVBGCODEBOOKMODEL_NAME".modMax={int, int, int}"; CvBGCodeBookModel *s=checkCvBGCodeBookModel(L,1); if ((!lua_istable(L,3))||(lua_objlen(L,3)!=3)) luaL_error(L,f_msg); for(int i=0;i<3;i++) { lua_rawgeti(L,3,i+1); s->modMax[i]=(uchar)checkint(L,4); lua_pop(L,1); } return 0; }
/*** Send a message from a socket. @function sendto @int fd socket descriptor to act on @string buffer message bytes to send @tparam sockaddr destination socket address @treturn[1] int number of bytes sent, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see sendto(2) */ static int Psendto(lua_State *L) { size_t len; int fd = checkint(L, 1); const char *buf = luaL_checklstring(L, 2, &len); struct sockaddr_storage sa; socklen_t salen; checknargs (L, 3); if (sockaddr_from_lua(L, 3, &sa, &salen) != 0) return pusherror (L, "not a valid IPv4 dotted-decimal or IPv6 address string"); return pushresult(L, sendto(fd, buf, len, 0, (struct sockaddr *)&sa, salen), "sendto"); }
/*** Return the foreground and background colors associated with a color pair id. @function pair_content @int pair color pair id to act on @treturn int foreground color of *pair* @treturn int background color of *pair* @see can_change_color(3x) @see init_pair */ static int Ppair_content(lua_State *L) { short pair = checkint(L, 1); short f; short b; int ret = pair_content(pair, &f, &b); if (ret == ERR) return 0; lua_pushinteger(L, f); lua_pushinteger(L, b); return 2; }
LUALIB_API void luaL_setn (lua_State *L, int t, int n) { t = abs_index(L, t); lua_pushliteral(L, "n"); lua_rawget(L, t); if (checkint(L, 1) >= 0) { /* is there a numeric field `n'? */ lua_pushliteral(L, "n"); /* use it */ lua_pushinteger(L, n); lua_rawset(L, t); } else { /* use `sizes' */ getsizes(L); lua_pushvalue(L, t); lua_pushinteger(L, n); lua_rawset(L, -3); /* sizes[t] = n */ lua_pop(L, 1); /* remove `sizes' */ } }
/*** Accept a connection on a socket. @function accept @int fd socket descriptor to act on @treturn[1] int connection descriptor @treturn[1] table connection address, if successful @return[2] nil @treturn[2] string error message @treturn[2] int errnum @see accept(2) */ static int Paccept(lua_State *L) { int fd_client; struct sockaddr_storage sa; unsigned int salen; int fd = checkint(L, 1); checknargs(L, 1); salen = sizeof(sa); fd_client = accept(fd, (struct sockaddr *)&sa, &salen); if (fd_client == -1) return pusherror(L, "accept"); lua_pushnumber(L, fd_client); return 1 + pushsockaddrinfo(L, sa.ss_family, (struct sockaddr *)&sa); }
/** * Executes the main script. * @param L lua state * @param script code of the main script * @param argc number of arguments to pass to the script * @param argv vector of the arguments to pass * @return the main script's return status */ static int run_script(lua_State *L, const char *code, int argc, char *argv[]) { int err; int res; int i = 0; /* build the global arg table */ lua_getglobal(L, "_G"); /* push all the arguments to the _G["arg"] variable */ lua_createtable(L, argc, 0); do { lua_pushnumber(L, i); lua_pushstring(L, *argv); lua_rawset(L, -3); i++; } while (*(++argv) != NULL); lua_setfield(L, -2, "arg"); /* load the main script and pass it the content of arg */ err = luaL_loadstring(L, code); if (err != LUA_OK) exit(112); lua_getfield(L, -2, "arg"); if (debug) printf("main script start\n"); lua_call(L, 1, 1); /* * if the main script returns an exit status, use it as the ours, * otherwise, consider the execution went well */ res = lua_type(L, -1) == LUA_TNUMBER ? checkint(L, -1) : 0; lua_settop(L, 0); return res; }
/*** Find all files in this directory matching a shell pattern. @function glob @string[opt="*"] pat shell glob pattern @param flags currently limited to posix.glob.GLOB_MARK @treturn table matching filenames @see glob(3) @see glob.lua */ static int Pglob(lua_State *L) { const char *pattern = optstring(L, 1, "*"); int flags = checkint(L, 2); glob_t globres; checknargs(L, 2); if (glob(pattern, flags, NULL, &globres)) return pusherror(L, pattern); else { unsigned int i; lua_newtable(L); for (i=1; i<=globres.gl_pathc; i++) { lua_pushstring(L, globres.gl_pathv[i-1]); lua_rawseti(L, -2, i); } globfree(&globres); return 1; } }
static int CvBGPixelStat_nis_trained_dyn_model(lua_State *L) { const char f_msg[]=CVBGPIXELSTAT_NAME".is_trained_dyn_model=int"; checkCvBGPixelStat(L,1)->is_trained_dyn_model=(uchar)checkint(L,3); return 0; }
/*** Mask bit for given log priority. @function LOG_MASK @int priority one of `LOG_EMERG`, `LOG_ALERT`, `LOG_CRIT`, `LOG_WARNING`, `LOG_NOTICE`, `LOG_INFO` or `LOG_DEBUG` @treturn int mask bit corresponding to *priority* @see setlogmask(3) */ static int PLOG_MASK(lua_State *L) { checknargs(L, 1); return pushintresult(LOG_MASK(checkint(L, 1))); }
static int CvLSVMFilterPosition_nl(lua_State *L) { const char f_msg[]=CVLSVMFILTERPOSITION_NAME".l=int"; checkCvLSVMFilterPosition(L,1)->l=checkint(L,3); return 0; }
double SECTION __ieee754_pow(double x, double y) { double z,a,aa,error, t,a1,a2,y1,y2; #if 0 double gor=1.0; #endif mynumber u,v; int k; int4 qx,qy; v.x=y; u.x=x; if (v.i[LOW_HALF] == 0) { /* of y */ qx = u.i[HIGH_HALF]&0x7fffffff; /* Checking if x is not too small to compute */ if (((qx==0x7ff00000)&&(u.i[LOW_HALF]!=0))||(qx>0x7ff00000)) return NaNQ.x; if (y == 1.0) return x; if (y == 2.0) return x*x; if (y == -1.0) return 1.0/x; if (y == 0) return 1.0; } /* else */ if(((u.i[HIGH_HALF]>0 && u.i[HIGH_HALF]<0x7ff00000)|| /* x>0 and not x->0 */ (u.i[HIGH_HALF]==0 && u.i[LOW_HALF]!=0)) && /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */ (v.i[HIGH_HALF]&0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */ double retval; SET_RESTORE_ROUND (FE_TONEAREST); /* Avoid internal underflow for tiny y. The exact value of y does not matter if |y| <= 2**-64. */ if (ABS (y) < 0x1p-64) y = y < 0 ? -0x1p-64 : 0x1p-64; z = log1(x,&aa,&error); /* x^y =e^(y log (X)) */ t = y*134217729.0; y1 = t - (t-y); y2 = y - y1; t = z*134217729.0; a1 = t - (t-z); a2 = (z - a1)+aa; a = y1*a1; aa = y2*a1 + y*a2; a1 = a+aa; a2 = (a-a1)+aa; error = error*ABS(y); t = __exp1(a1,a2,1.9e16*error); /* return -10 or 0 if wasn't computed exactly */ retval = (t>0)?t:power1(x,y); return retval; } if (x == 0) { if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0) || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) return y; if (ABS(y) > 1.0e20) return (y>0)?0:1.0/0.0; k = checkint(y); if (k == -1) return y < 0 ? 1.0/x : x; else return y < 0 ? 1.0/0.0 : 0.0; /* return 0 */ } qx = u.i[HIGH_HALF]&0x7fffffff; /* no sign */ qy = v.i[HIGH_HALF]&0x7fffffff; /* no sign */ if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) return NaNQ.x; if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) return x == 1.0 ? 1.0 : NaNQ.x; /* if x<0 */ if (u.i[HIGH_HALF] < 0) { k = checkint(y); if (k==0) { if (qy == 0x7ff00000) { if (x == -1.0) return 1.0; else if (x > -1.0) return v.i[HIGH_HALF] < 0 ? INF.x : 0.0; else return v.i[HIGH_HALF] < 0 ? 0.0 : INF.x; } else if (qx == 0x7ff00000) return y < 0 ? 0.0 : INF.x; return NaNQ.x; /* y not integer and x<0 */ } else if (qx == 0x7ff00000) { if (k < 0) return y < 0 ? nZERO.x : nINF.x; else return y < 0 ? 0.0 : INF.x; } return (k==1)?__ieee754_pow(-x,y):-__ieee754_pow(-x,y); /* if y even or odd */ } /* x>0 */ if (qx == 0x7ff00000) /* x= 2^-0x3ff */ {if (y == 0) return NaNQ.x; return (y>0)?x:0; } if (qy > 0x45f00000 && qy < 0x7ff00000) { if (x == 1.0) return 1.0; if (y>0) return (x>1.0)?huge*huge:tiny*tiny; if (y<0) return (x<1.0)?huge*huge:tiny*tiny; } if (x == 1.0) return 1.0; if (y>0) return (x>1.0)?INF.x:0; if (y<0) return (x<1.0)?INF.x:0; return 0; /* unreachable, to make the compiler happy */ }
/* An ultimate power routine. Given two IEEE double machine numbers y, x it computes the correctly rounded (to nearest) value of X^y. */ double SECTION __ieee754_pow (double x, double y) { double z, a, aa, error, t, a1, a2, y1, y2; mynumber u, v; int k; int4 qx, qy; v.x = y; u.x = x; if (v.i[LOW_HALF] == 0) { /* of y */ qx = u.i[HIGH_HALF] & 0x7fffffff; /* Is x a NaN? */ if ((((qx == 0x7ff00000) && (u.i[LOW_HALF] != 0)) || (qx > 0x7ff00000)) && (y != 0 || issignaling (x))) return x + x; if (y == 1.0) return x; if (y == 2.0) return x * x; if (y == -1.0) return 1.0 / x; if (y == 0) return 1.0; } /* else */ if (((u.i[HIGH_HALF] > 0 && u.i[HIGH_HALF] < 0x7ff00000) || /* x>0 and not x->0 */ (u.i[HIGH_HALF] == 0 && u.i[LOW_HALF] != 0)) && /* 2^-1023< x<= 2^-1023 * 0x1.0000ffffffff */ (v.i[HIGH_HALF] & 0x7fffffff) < 0x4ff00000) { /* if y<-1 or y>1 */ double retval; { SET_RESTORE_ROUND (FE_TONEAREST); /* Avoid internal underflow for tiny y. The exact value of y does not matter if |y| <= 2**-64. */ if (fabs (y) < 0x1p-64) y = y < 0 ? -0x1p-64 : 0x1p-64; z = log1 (x, &aa, &error); /* x^y =e^(y log (X)) */ t = y * CN; y1 = t - (t - y); y2 = y - y1; t = z * CN; a1 = t - (t - z); a2 = (z - a1) + aa; a = y1 * a1; aa = y2 * a1 + y * a2; a1 = a + aa; a2 = (a - a1) + aa; error = error * fabs (y); t = __exp1 (a1, a2, 1.9e16 * error); /* return -10 or 0 if wasn't computed exactly */ retval = (t > 0) ? t : power1 (x, y); } if (isinf (retval)) retval = huge * huge; else if (retval == 0) retval = tiny * tiny; else math_check_force_underflow_nonneg (retval); return retval; } if (x == 0) { if (((v.i[HIGH_HALF] & 0x7fffffff) == 0x7ff00000 && v.i[LOW_HALF] != 0) || (v.i[HIGH_HALF] & 0x7fffffff) > 0x7ff00000) /* NaN */ return y + y; if (fabs (y) > 1.0e20) return (y > 0) ? 0 : 1.0 / 0.0; k = checkint (y); if (k == -1) return y < 0 ? 1.0 / x : x; else return y < 0 ? 1.0 / 0.0 : 0.0; /* return 0 */ } qx = u.i[HIGH_HALF] & 0x7fffffff; /* no sign */ qy = v.i[HIGH_HALF] & 0x7fffffff; /* no sign */ if (qx >= 0x7ff00000 && (qx > 0x7ff00000 || u.i[LOW_HALF] != 0)) /* NaN */ return x + y; if (qy >= 0x7ff00000 && (qy > 0x7ff00000 || v.i[LOW_HALF] != 0)) /* NaN */ return x == 1.0 && !issignaling (y) ? 1.0 : y + y; /* if x<0 */ if (u.i[HIGH_HALF] < 0) { k = checkint (y); if (k == 0) { if (qy == 0x7ff00000) { if (x == -1.0) return 1.0; else if (x > -1.0) return v.i[HIGH_HALF] < 0 ? INF.x : 0.0; else return v.i[HIGH_HALF] < 0 ? 0.0 : INF.x; } else if (qx == 0x7ff00000) return y < 0 ? 0.0 : INF.x; return (x - x) / (x - x); /* y not integer and x<0 */ } else if (qx == 0x7ff00000) { if (k < 0) return y < 0 ? nZERO.x : nINF.x; else return y < 0 ? 0.0 : INF.x; } /* if y even or odd */ if (k == 1) return __ieee754_pow (-x, y); else { double retval; { SET_RESTORE_ROUND (FE_TONEAREST); retval = -__ieee754_pow (-x, y); } if (isinf (retval)) retval = -huge * huge; else if (retval == 0) retval = -tiny * tiny; return retval; } } /* x>0 */ if (qx == 0x7ff00000) /* x= 2^-0x3ff */ return y > 0 ? x : 0; if (qy > 0x45f00000 && qy < 0x7ff00000) { if (x == 1.0) return 1.0; if (y > 0) return (x > 1.0) ? huge * huge : tiny * tiny; if (y < 0) return (x < 1.0) ? huge * huge : tiny * tiny; } if (x == 1.0) return 1.0; if (y > 0) return (x > 1.0) ? INF.x : 0; if (y < 0) return (x < 1.0) ? INF.x : 0; return 0; /* unreachable, to make the compiler happy */ }