CGI-SpeedyCGI
view release on metacpan or search on metacpan
src/speedy_util.c view on Meta::CPAN
void speedy_util_mapout(SpeedyMapInfo *mi) {
if (mi->addr) {
if (mi->is_mmaped)
(void) munmap(mi->addr, mi->maplen);
else
speedy_free(mi->addr);
mi->addr = NULL;
}
speedy_free(mi);
}
static int readall(int fd, void *addr, int len) {
int numread, n;
for (numread = 0; len - numread; numread += n) {
n = read(fd, ((char*)addr) + numread, len - numread);
if (n == -1)
return -1;
if (n == 0)
break;
}
return numread;
}
SpeedyMapInfo *speedy_util_mapin(int fd, int max_size, int file_size)
{
SpeedyMapInfo *mi;
speedy_new(mi, 1, SpeedyMapInfo);
if (file_size) {
mi->maplen = max_size == -1 ? file_size : min(file_size, max_size);
mi->addr = mmap(0, mi->maplen, PROT_READ, MAP_SHARED, fd, 0);
mi->is_mmaped = (mi->addr != (void*)MAP_FAILED);
if (!mi->is_mmaped) {
speedy_new(mi->addr, mi->maplen, char);
lseek(fd, 0, SEEK_SET);
mi->maplen = readall(fd, mi->addr, mi->maplen);
if (mi->maplen == -1) {
speedy_util_mapout(mi);
return NULL;
}
}
} else {
mi->maplen = 0;
mi->addr = NULL;
mi->is_mmaped = 0;
}
return mi;
}
SPEEDY_INLINE SpeedyDevIno speedy_util_stat_devino(const struct stat *stbuf) {
SpeedyDevIno retval;
retval.d = stbuf->st_dev;
retval.i = stbuf->st_ino;
return retval;
}
SPEEDY_INLINE int speedy_util_open_stat(const char *path, struct stat *stbuf)
{
int fd = open(path, O_RDONLY);
if (fd != -1 && fstat(fd, stbuf) == -1) {
close(fd);
fd = -1;
}
return fd;
}
void speedy_util_exit(int status, int underbar_exit) {
# ifdef SPEEDY_PROFILING
end_profiling(underbar_exit);
# endif
# ifdef SPEEDY_DEBUG
if (savecore) {
char buf[200];
struct timeval tv;
mkdir("/tmp/speedy_core", 0777);
gettimeofday(&tv, NULL);
sprintf(buf, "/tmp/speedy_core/%s.%d.%06d.%d", SPEEDY_PROGNAME, (int)tv.tv_sec, (int)tv.tv_usec, getpid());
mkdir(buf, 0777);
chdir(buf);
kill(getpid(), SIGFPE);
}
# endif
if (underbar_exit)
_exit(status);
else
exit(status);
}
int speedy_util_kill(pid_t pid, int sig) {
return pid
? (pid == speedy_util_getpid() ? 0 : kill(pid, sig))
: -1;
}
( run in 2.720 seconds using v1.01-cache-2.11-cpan-98e64b0badf )