diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2009-02-16 15:11:41 +0100 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2009-02-16 15:11:41 +0100 |
commit | b29154b2936699ba4e6eeb423189dc03ae00c2d7 (patch) | |
tree | ef8178fcbcf65cf0bc19409856d5768d458e4241 /src/port/string.c | |
parent | 2ac829174afa6052720b762bd5ba5fde759bcc6e (diff) | |
download | wolfbones-b29154b2936699ba4e6eeb423189dc03ae00c2d7.tar.gz wolfbones-b29154b2936699ba4e6eeb423189dc03ae00c2d7.tar.bz2 |
added stub implementations for strerror_r and strdup
Diffstat (limited to 'src/port/string.c')
-rw-r--r-- | src/port/string.c | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/port/string.c b/src/port/string.c new file mode 100644 index 0000000..a87a1a2 --- /dev/null +++ b/src/port/string.c @@ -0,0 +1,70 @@ +/* + Copyright (C) 2008 Andreas Baumann <abaumann@yahoo.com> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include "port/string.h" + +/** + * strdup is not always part of the C library or they need insane flags to + * be set which would enable too many non-standard things. + */ + +#if !defined HAVE_STRDUP + +#include <stdlib.h> /* for malloc, NULL */ + +char *wolf_strdup( const char *s ) { + char *d; + d = (char *)malloc( strlen( s ) + 1 ); + if( d == NULL ) return NULL; + strcpy( d, s ); + return d; +} + +#else + +extern int dummy; /* prevent ISO C forbids an empty source file' warning */ + +#endif /* !defined HAVE_STRDUP */ + +/** + * strerror_r exists in various fassions (XSI and GNU flavour in glibc). We stick to + * the API of POSIX1 of course.. + */ + +#if !defined HAVE_STRERROR_R + +#include "port/stdio.h" /* for snprintf */ +#include <sys/types.h> /* for size_t */ +#include <errno.h> /* for errno */ + +int wolf_strerror_r( int num, char *buf, size_t buflen ) { + const char *msg; + int len; + + msg = strerror( num ); + if( msg == NULL ) { + len = snprintf( buf, buflen, "Unknown error %d", num ); + errno = EINVAL; + return -1; + } + + strncpy( buf, msg, buflen-1 ); + errno = 0; + return 0; +} + +#endif /* !defined HAVE_STRERROR_R */ |