int entry_from_file(FILE *f, entry_t *entry){ int ret; uint64 r; ret=int_from_file(f,8,&r); if(ret) return 1; entry->key=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->move=r; ret=int_from_file(f,2,&r); if(ret) return 1; entry->weight=r; ret=int_from_file(f,4,&r); if(ret) return 1; entry->learn=r; return 0; }
int main(int argc, char *const argv[], const char *const *envp) { struct rlimit lim; argv++; bzero(&lim, sizeof(lim)); /* RLIMIT_NOFILE cannot be set to infinity. Instead, discover its local maximal value and use that */ #ifdef __APPLE__ #include <sys/syslimits.h> lim.rlim_cur = OPEN_MAX; lim.rlim_max = OPEN_MAX; if (setrlimit(RLIMIT_NOFILE, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_NOFILE,)", strerror(errno)); } #else #ifdef __linux__ /* /proc/sys/fs/nr_open has the maximum value. from kernel/sys.c: if (resource == RLIMIT_NOFILE && new_rlim.rlim_max > sysctl_nr_open) return -EPERM; */ long int nr_open = int_from_file("/proc/sys/fs/nr_open"); lim.rlim_cur = nr_open; lim.rlim_max = nr_open; if (setrlimit(RLIMIT_NOFILE, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_NOFILE,)", strerror(errno)); } #endif #endif /* These limits are easy - can all be infinity. */ lim.rlim_cur = RLIM_INFINITY; lim.rlim_max = RLIM_INFINITY; /* Don't unlimit core by default. if (setrlimit(RLIMIT_CORE, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_CORE,)", strerror(errno)); } */ if (setrlimit(RLIMIT_CPU, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_CPU,)", strerror(errno)); } if (setrlimit(RLIMIT_DATA, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_DATA,)", strerror(errno)); } if (setrlimit(RLIMIT_FSIZE, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_FSIZE,)", strerror(errno)); } if (setrlimit(RLIMIT_MEMLOCK, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_MEMLOCK,)", strerror(errno)); } if (setrlimit(RLIMIT_NPROC, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_NPROC,)", strerror(errno)); } if (setrlimit(RLIMIT_RSS, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_RSS,)", strerror(errno)); } /* Changing the stack size can change the way an app allocates memory. leave as-is lim.rlim_cur = 1024 * 1024 * 63; lim.rlim_max = 1024 * 1024 * 63; if (setrlimit(RLIMIT_STACK, &lim)) { die(111, "setlimit: fatal: can't setrlimit(RLIMIT_STACK,)", strerror(errno)); } */ execvp(argv[0], argv); die(111, "setlimit: fatal: unable to run ", argv[0]); return 1; /* not reached */ }