diff options
Diffstat (limited to 'libbb/xfuncs.c')
-rw-r--r-- | libbb/xfuncs.c | 133 |
1 files changed, 70 insertions, 63 deletions
diff --git a/libbb/xfuncs.c b/libbb/xfuncs.c index 4d81fdc..b2b53a7 100644 --- a/libbb/xfuncs.c +++ b/libbb/xfuncs.c @@ -16,8 +16,12 @@ * succeeded. */ #ifndef DMALLOC +/* dmalloc provides variants of these that do abort() on failure. + * Since dmalloc's prototypes overwrite the impls here as they are + * included after these prototypes in libbb.h, all is well. + */ #ifdef L_xmalloc -// Die if we can't allocate size bytes of memory. +/* Die if we can't allocate size bytes of memory. */ void *xmalloc(size_t size) { void *ptr = malloc(size); @@ -28,9 +32,9 @@ void *xmalloc(size_t size) #endif #ifdef L_xrealloc -// Die if we can't resize previously allocated memory. (This returns a pointer -// to the new memory, which may or may not be the same as the old memory. -// It'll copy the contents to a new chunk and free the old one if necessary.) +/* Die if we can't resize previously allocated memory. (This returns a pointer + * to the new memory, which may or may not be the same as the old memory. + * It'll copy the contents to a new chunk and free the old one if necessary.) */ void *xrealloc(void *ptr, size_t size) { ptr = realloc(ptr, size); @@ -39,9 +43,11 @@ void *xrealloc(void *ptr, size_t size) return ptr; } #endif +#endif /* DMALLOC */ + #ifdef L_xzalloc -// Die if we can't allocate and zero size bytes of memory. +/* Die if we can't allocate and zero size bytes of memory. */ void *xzalloc(size_t size) { void *ptr = xmalloc(size); @@ -50,10 +56,8 @@ void *xzalloc(size_t size) } #endif -#endif /* DMALLOC */ - #ifdef L_xstrdup -// Die if we can't copy a string to freshly allocated memory. +/* Die if we can't copy a string to freshly allocated memory. */ char * xstrdup(const char *s) { char *t; @@ -71,8 +75,9 @@ char * xstrdup(const char *s) #endif #ifdef L_xstrndup -// Die if we can't allocate n+1 bytes (space for the null terminator) and copy -// the (possibly truncated to length n) string into it. +/* Die if we can't allocate n+1 bytes (space for the null terminator) and copy + * the (possibly truncated to length n) string into it. + */ char * xstrndup(const char *s, int n) { char *t; @@ -87,8 +92,9 @@ char * xstrndup(const char *s, int n) #endif #ifdef L_xfopen -// Die if we can't open a file and return a FILE * to it. -// Notice we haven't got xfread(), This is for use with fscanf() and friends. +/* Die if we can't open a file and return a FILE * to it. + * Notice we haven't got xfread(), This is for use with fscanf() and friends. + */ FILE *xfopen(const char *path, const char *mode) { FILE *fp; @@ -99,7 +105,7 @@ FILE *xfopen(const char *path, const char *mode) #endif #ifdef L_xopen -// Die if we can't open an existing file and return an fd. +/* Die if we can't open an existing file and return an fd. */ int xopen(const char *pathname, int flags) { if (ENABLE_DEBUG && (flags && O_CREAT)) @@ -110,7 +116,7 @@ int xopen(const char *pathname, int flags) #endif #ifdef L_xopen3 -// Die if we can't open a new file and return an fd. +/* Die if we can't open a new file and return an fd. */ int xopen3(const char *pathname, int flags, int mode) { int ret; @@ -124,7 +130,7 @@ int xopen3(const char *pathname, int flags, int mode) #endif #ifdef L_xread -// Die with an error message if we can't read the entire buffer. +/* Die with an error message if we can't read the entire buffer. */ void xread(int fd, void *buf, size_t count) { while (count) { @@ -139,7 +145,7 @@ void xread(int fd, void *buf, size_t count) #endif #ifdef L_xwrite -// Die with an error message if we can't write the entire buffer. +/* Die with an error message if we can't write the entire buffer. */ void xwrite(int fd, void *buf, size_t count) { while (count) { @@ -154,7 +160,7 @@ void xwrite(int fd, void *buf, size_t count) #endif #ifdef L_xlseek -// Die with an error message if we can't lseek to the right spot. +/* Die with an error message if we can't lseek to the right spot. */ void xlseek(int fd, off_t offset, int whence) { if (offset != lseek(fd, offset, whence)) bb_error_msg_and_die("lseek"); @@ -162,7 +168,7 @@ void xlseek(int fd, off_t offset, int whence) #endif #ifdef L_xread_char -// Die with an error message if we can't read one character. +/* Die with an error message if we can't read one character. */ unsigned char xread_char(int fd) { char tmp; @@ -174,7 +180,7 @@ unsigned char xread_char(int fd) #endif #ifdef L_xferror -// Die with supplied error message if this FILE * has ferror set. +/* Die with supplied error message if this FILE * has ferror set. */ void xferror(FILE *fp, const char *fn) { if (ferror(fp)) { @@ -184,7 +190,7 @@ void xferror(FILE *fp, const char *fn) #endif #ifdef L_xferror_stdout -// Die with an error message if stdout has ferror set. +/* Die with an error message if stdout has ferror set. */ void xferror_stdout(void) { xferror(stdout, bb_msg_standard_output); @@ -192,7 +198,7 @@ void xferror_stdout(void) #endif #ifdef L_xfflush_stdout -// Die with an error message if we have trouble flushing stdout. +/* Die with an error message if we have trouble flushing stdout. */ void xfflush_stdout(void) { if (fflush(stdout)) { @@ -202,24 +208,25 @@ void xfflush_stdout(void) #endif #ifdef L_spawn -// This does a fork/exec in one call, using vfork(). Return PID of new child, -// -1 for failure. Runs argv[0], searching path if that has no / in it. +/* This does a fork/exec in one call, using vfork(). Return PID of new child, + * -1 for failure. Runs argv[0], searching path if that has no / in it. + */ pid_t spawn(char **argv) { static int failed; pid_t pid; void *app = ENABLE_FEATURE_SH_STANDALONE_SHELL ? find_applet_by_name(argv[0]) : 0; - // Be nice to nommu machines. + /* Be nice to nommu machines. */ failed = 0; pid = vfork(); if (pid < 0) return pid; if (!pid) { execvp(app ? CONFIG_BUSYBOX_EXEC_PATH : *argv, argv); - // We're sharing a stack with blocked parent, let parent know we failed - // and then exit to unblock parent (but don't run atexit() stuff, which - // would screw up parent.) + /* We're sharing a stack with blocked parent, let parent know we failed + * and then exit to unblock parent (but don't run atexit() stuff, which + would screw up parent.) */ failed = -1; _exit(0); @@ -229,7 +236,7 @@ pid_t spawn(char **argv) #endif #ifdef L_xspawn -// Die with an error message if we can't spawn a child process. +/* Die with an error message if we can't spawn a child process. */ pid_t xspawn(char **argv) { pid_t pid = spawn(argv); @@ -239,7 +246,7 @@ pid_t xspawn(char **argv) #endif #ifdef L_wait4 -// Wait for the specified child PID to exit, returning child's error return. +/* Wait for the specified child PID to exit, returning child's error return. */ int wait4pid(int pid) { int status; @@ -252,9 +259,9 @@ int wait4pid(int pid) #endif #ifdef L_itoa -// Convert unsigned integer to ascii, writing into supplied buffer. A -// truncated result is always null terminated (unless buflen is 0), and -// contains the first few digits of the result ala strncpy. +/* Convert unsigned integer to ascii, writing into supplied buffer. A + * truncated result is always null terminated (unless buflen is 0), and + * contains the first few digits of the result ala strncpy. */ void utoa_to_buf(unsigned n, char *buf, unsigned buflen) { int i, out = 0; @@ -272,7 +279,7 @@ void utoa_to_buf(unsigned n, char *buf, unsigned buflen) } } -// Convert signed integer to ascii, like utoa_to_buf() +/* Convert signed integer to ascii, like utoa_to_buf() */ void itoa_to_buf(int n, char *buf, unsigned buflen) { if (buflen && n<0) { @@ -283,16 +290,16 @@ void itoa_to_buf(int n, char *buf, unsigned buflen) utoa_to_buf((unsigned)n, buf, buflen); } -// The following two functions use a static buffer, so calling either one a -// second time will overwrite previous results. -// -// The largest 32 bit integer is -2 billion plus null terminator, or 12 bytes. -// Int should always be 32 bits on any remotely Unix-like system, see -// http://www.unix.org/whitepapers/64bit.html for the reasons why. - +/* The following two functions use a static buffer, so calling either one a + * second time will overwrite previous results. + * + * The largest 32 bit integer is -2 billion plus null terminator, or 12 bytes. + * Int should always be 32 bits on any remotely Unix-like system, see + * http://www.unix.org/whitepapers/64bit.html for the reasons why. +*/ static char local_buf[12]; -// Convert unsigned integer to ascii using a static buffer (returned). +/* Convert unsigned integer to ascii using a static buffer (returned). */ char *utoa(unsigned n) { utoa_to_buf(n, local_buf, sizeof(local_buf)); @@ -300,7 +307,7 @@ char *utoa(unsigned n) return local_buf; } -// Convert signed integer to ascii using a static buffer (returned). +/* Convert signed integer to ascii using a static buffer (returned). */ char *itoa(int n) { itoa_to_buf(n, local_buf, sizeof(local_buf)); @@ -310,15 +317,15 @@ char *itoa(int n) #endif #ifdef L_setuid -// Die with an error message if we can't set gid. (Because resource limits may -// limit this user to a given number of processes, and if that fills up the -// setgid() will fail and we'll _still_be_root_, which is bad.) +/* Die with an error message if we can't set gid. (Because resource limits may + * limit this user to a given number of processes, and if that fills up the + * setgid() will fail and we'll _still_be_root_, which is bad.) */ void xsetgid(gid_t gid) { if (setgid(gid)) bb_error_msg_and_die("setgid"); } -// Die with an error message if we cant' set uid. (See xsetgid() for why.) +/* Die with an error message if we cant' set uid. (See xsetgid() for why.) */ void xsetuid(uid_t uid) { if (setuid(uid)) bb_error_msg_and_die("setuid"); @@ -326,31 +333,31 @@ void xsetuid(uid_t uid) #endif #ifdef L_fdlength -// Return how long the file at fd is, if there's any way to determine it. +/* Return how long the file at fd is, if there's any way to determine it. */ off_t fdlength(int fd) { off_t bottom = 0, top = 0, pos; long size; - // If the ioctl works for this, return it. + /* If the ioctl works for this, return it. */ if (ioctl(fd, BLKGETSIZE, &size) >= 0) return size*512; - // If not, do a binary search for the last location we can read. (Some - // block devices don't do BLKGETSIZE right.) + /* If not, do a binary search for the last location we can read. (Some + * block devices don't do BLKGETSIZE right.) */ do { char temp; pos = bottom + (top - bottom) / 2;; - // If we can read from the current location, it's bigger. + /* If we can read from the current location, it's bigger. */ if (lseek(fd, pos, 0)>=0 && safe_read(fd, &temp, 1)==1) { if (bottom == top) bottom = top = (top+1) * 2; else bottom = pos; - // If we can't, it's smaller. + /* If we can't, it's smaller. */ } else { if (bottom == top) { @@ -366,8 +373,8 @@ off_t fdlength(int fd) #endif #ifdef L_xasprintf -// Die with an error message if we can't malloc() enough space and do an -// sprintf() into that space. +/* Die with an error message if we can't malloc() enough space and do an + * sprintf() into that space. */ char *xasprintf(const char *format, ...) { va_list p; @@ -396,8 +403,8 @@ char *xasprintf(const char *format, ...) #endif #ifdef L_xprint_and_close_file -// Die with an error message if we can't copy an entire FILE * to stdout, then -// close that file. +/* Die with an error message if we can't copy an entire FILE * to stdout, then + * close that file. */ void xprint_and_close_file(FILE *file) { // copyfd outputs error messages for us. @@ -408,7 +415,7 @@ void xprint_and_close_file(FILE *file) #endif #ifdef L_xchdir -// Die if we can't chdir to a new path. +/* Die if we can't chdir to a new path. */ void xchdir(const char *path) { if (chdir(path)) @@ -417,7 +424,7 @@ void xchdir(const char *path) #endif #ifdef L_warn_opendir -// Print a warning message if opendir() fails, but don't die. +/* Print a warning message if opendir() fails, but don't die. */ DIR *warn_opendir(const char *path) { DIR *dp; @@ -431,7 +438,7 @@ DIR *warn_opendir(const char *path) #endif #ifdef L_xopendir -// Die with an error message if opendir() fails. +/* Die with an error message if opendir() fails. */ DIR *xopendir(const char *path) { DIR *dp; @@ -444,7 +451,7 @@ DIR *xopendir(const char *path) #ifdef L_xdaemon #ifndef BB_NOMMU -// Die with an error message if we can't daemonize. +/* Die with an error message if we can't daemonize. */ void xdaemon(int nochdir, int noclose) { if (daemon(nochdir, noclose)) bb_perror_msg_and_die("daemon"); @@ -453,7 +460,7 @@ void xdaemon(int nochdir, int noclose) #endif #ifdef L_xsocket -// Die with an error message if we can't open a new socket. +/* Die with an error message if we can't open a new socket. */ int xsocket(int domain, int type, int protocol) { int r = socket(domain, type, protocol); @@ -465,7 +472,7 @@ int xsocket(int domain, int type, int protocol) #endif #ifdef L_xbind -// Die with an error message if we can't bind a socket to an address. +/* Die with an error message if we can't bind a socket to an address. */ void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) { if (bind(sockfd, my_addr, addrlen)) bb_perror_msg_and_die("bind"); @@ -473,7 +480,7 @@ void xbind(int sockfd, struct sockaddr *my_addr, socklen_t addrlen) #endif #ifdef L_xlisten -// Die with an error message if we can't listen for connections on a socket. +/* Die with an error message if we can't listen for connections on a socket. */ void xlisten(int s, int backlog) { if (listen(s, backlog)) bb_perror_msg_and_die("listen"); |