#include "uwsgi.h" extern struct uwsgi_server uwsgi; #ifdef __BIG_ENDIAN__ uint16_t uwsgi_swap16(uint16_t x) { return (uint16_t) ((x & 0xff) << 8 | (x & 0xff00) >> 8); } #endif void set_harakiri(int sec) { if (uwsgi.workers) { if (sec == 0) { uwsgi.workers[uwsgi.mywid].harakiri = 0 ; } else { uwsgi.workers[uwsgi.mywid].harakiri = time(NULL) + sec ; } } else { alarm(sec); } } #ifndef UNBIT void daemonize(char *logfile) { pid_t pid; int fd, fdin; pid = fork(); if (pid < 0) { perror("fork()"); exit(1) ; } if (pid != 0) { exit(0); } if (setsid() < 0) { perror("setsid()"); exit(1) ; } /* refork... */ pid = fork(); if (pid < 0) { perror("fork()"); exit(1) ; } if (pid != 0) { exit(0); } umask(0); /*if (chdir("/") != 0) { perror("chdir()"); exit(1); }*/ fdin = open("/dev/null", O_RDWR); if (fdin < 0) { perror("open()"); exit(1); } fd = open(logfile, O_RDWR|O_CREAT|O_APPEND, S_IRUSR|S_IWUSR|S_IRGRP ); if (fd < 0) { perror("open()"); exit(1); } /* stdin */ if (dup2(fdin,0) < 0) { perror("dup2()"); exit(1); } /* stdout */ if (dup2(fd,1) < 0) { perror("dup2()"); exit(1); } /* stderr */ if (dup2(fd,2) < 0) { perror("dup2()"); exit(1); } close(fd); } #endif char * uwsgi_get_cwd() { int newsize = 256 ; char *cwd ; cwd = malloc(newsize); if (cwd == NULL) { perror("malloc()"); exit(1); } if (getcwd(cwd, newsize) == NULL) { newsize = errno; fprintf(stderr,"need a bigger buffer (%d bytes) for getcwd(). doing reallocation.\n", newsize); free(cwd); cwd = malloc(newsize); if (cwd == NULL) { perror("malloc()"); exit(1); } if (getcwd(cwd, newsize) == NULL) { perror("getcwd()"); exit(1); } } return cwd; }