Mercurial > hg > toybox
view lib/portability.c @ 1715:a471f338b055 draft
fix format problems in tar.c
%o is unsigned, but off_t is signed.
* takes an int.
an error_msg call was missing an argument.
only one of these is an actual error, but i'd like to fix the others
too so that we (toybox, but if not, then Android) can turn on format
string warnings to prevent future bugs like the stat.c LP32 ones.
author | Elliott Hughes <enh@google.com> |
---|---|
date | Sun, 01 Mar 2015 16:11:50 -0600 |
parents | 5d003cc2fa16 |
children | 1b97da3c7b91 |
line wrap: on
line source
/* portability.c - code to workaround the deficiencies of various platforms. * * Copyright 2012 Rob Landley <rob@landley.net> * Copyright 2012 Georgi Chorbadzhiyski <gf@unixsol.org> */ #include "toys.h" #if !defined(__uClinux__) pid_t xfork(void) { pid_t pid = fork(); if (pid < 0) perror_exit("fork"); return pid; } #endif #if defined(__APPLE__) ssize_t getdelim(char **linep, size_t *np, int delim, FILE *stream) { int ch; size_t new_len; ssize_t i = 0; char *line, *new_line; // Invalid input if (!linep || !np) { errno = EINVAL; return -1; } if (*linep == NULL || *np == 0) { *np = 1024; *linep = calloc(1, *np); if (*linep == NULL) return -1; } line = *linep; while ((ch = getc(stream)) != EOF) { if (i > *np) { // Need more space new_len = *np + 1024; new_line = realloc(*linep, new_len); if (!new_line) return -1; *np = new_len; *linep = new_line; } line[i] = ch; if (ch == delim) break; i += 1; } if (i > *np) { // Need more space new_len = i + 2; new_line = realloc(*linep, new_len); if (!new_line) return -1; *np = new_len; *linep = new_line; } line[i + 1] = '\0'; return i > 0 ? i : -1; } ssize_t getline(char **linep, size_t *np, FILE *stream) { return getdelim(linep, np, '\n', stream); } extern char **environ; int clearenv(void) { *environ = NULL; return 0; } #endif