Exemplo n.º 1
0
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;
}
Exemplo n.º 2
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 */
}