static void CLKsignal(int nr) { /* int restype; */ int k = timerTop; int t; (void) nr; if (signal(SIGALRM, CLKsignal) == SIG_ERR) { GDKsyserror("CLKsignal: call failed\n"); } if (timerTop == 0) { return; } t = time(0); while (k-- && t >= timer[k].alarm_time) { if (timer[k].action) { /* monet_eval(timer[k].action, &restype); */ GDKfree(timer[k].action); } else { MT_sema_up(&timer[k].sema, "CLKsignal"); } timerTop--; } if (timerTop > 0) { alarm(timer[timerTop - 1].alarm_time - time(0)); } }
int ATOMprint(int t, const void *p, stream *s) { ssize_t (*tostr) (char **, size_t *, const void *, bool); ssize_t res; if (p && t >= 0 && t < GDKatomcnt && (tostr = BATatoms[t].atomToStr)) { size_t sz; if (t != TYPE_bat && t < TYPE_str) { char buf[dblStrlen], *addr = buf; /* use memory from stack */ sz = dblStrlen; res = (*tostr) (&addr, &sz, p, true); if (res > 0) res = mnstr_write(s, buf, (size_t) res, 1); } else { str buf = NULL; sz = 0; res = (*tostr) (&buf, &sz, p, true); if (res > 0) res = mnstr_write(s, buf, (size_t) res, 1); GDKfree(buf); } } else { res = mnstr_write(s, "nil", 1, 3); } if (res < 0) GDKsyserror("ATOMprint: write failure\n"); return (int) res; }
/* * @+ Interrupt handling * The current version simply catches signals and prints a warning. * It should be extended to cope with the specifics of the interrupt * received. */ #if 0 /* these are unused */ static void BATSIGignore(int nr) { GDKsyserror("! ERROR signal %d caught by thread " SZFMT "\n", nr, (size_t) MT_getpid()); }
/* * CMDmodules * Obtains a list of modules by looking at what files are present in the * module directory. */ static BAT * TBL_getdir(void) { BAT *b = BATnew(TYPE_void, TYPE_str, 100, TRANSIENT); int i = 0; char *mod_path; size_t extlen = strlen(MAL_EXT); size_t len; struct dirent *dent; DIR *dirp = NULL; if ( b == 0) return 0; BATseqbase(b,0); mod_path = GDKgetenv("monet_mod_path"); if (mod_path == NULL) return b; while (*mod_path == PATH_SEP) mod_path++; if (*mod_path == 0) return b; while (mod_path || dirp) { if (dirp == NULL) { char *cur_dir; char *p; size_t l; if ((p = strchr(mod_path, PATH_SEP)) != NULL) { l = p - mod_path; } else { l = strlen(mod_path); } cur_dir = GDKmalloc(l + 1); if ( cur_dir == NULL){ GDKsyserror("mdb.modules"MAL_MALLOC_FAIL); return b; } strncpy(cur_dir, mod_path, l); cur_dir[l] = 0; if ((mod_path = p) != NULL) { while (*mod_path == PATH_SEP) mod_path++; } dirp = opendir(cur_dir); GDKfree(cur_dir); if (dirp == NULL) continue; } if ((dent = readdir(dirp)) == NULL) { closedir(dirp); dirp = NULL; continue; } len = strlen(dent->d_name); if (len < extlen || strcmp(dent->d_name + len - extlen, MAL_EXT) != 0) continue; dent->d_name[len - extlen] = 0; BUNappend(b, dent->d_name, FALSE); i++; } return b; }