/* pending.c - reusable stuff awaiting review * * new lib entries for stuff in toys/pending */ #include "toys.h" void daemonize(void) { int fd = open("/dev/null", O_RDWR); if (fd < 0) fd = xcreate("/", O_RDONLY, 0666); pid_t pid = fork(); if (pid < 0) perror_exit("DAEMON: failed to fork"); if (pid) exit(EXIT_SUCCESS); setsid(); dup2(fd, 0); dup2(fd, 1); dup2(fd, 2); if (fd > 2) close(fd); } char *human_readable(unsigned long long size) { static char buf[32]; char *tmp = (buf+4); //unsigned long long can come in 20byte string. int index, sz; for (index = 0; 1024 < size>>(10*index); index++); sz = size>>(10*index); if (sz < 10 && index) { sprintf(tmp, "%llu", size>>(10*(index-1))); sprintf(buf, "%c.%c", tmp[0], tmp[1]); } else sprintf(buf, "%u", sz); sprintf(buf, "%s%c", buf, " KMGTPE"[index]); return buf; }