Files
uwsgi/utils.c
T
2010-03-11 12:39:30 +01:00

135 lines
1.7 KiB
C

#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;
}