diff options
Diffstat (limited to '')
-rw-r--r-- | trunk/src/utils.c | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/trunk/src/utils.c b/trunk/src/utils.c new file mode 100644 index 000000000..a6dd9d8ae --- /dev/null +++ b/trunk/src/utils.c @@ -0,0 +1,161 @@ +/* the Music Player Daemon (MPD) + * Copyright (C) 2003-2007 by Warren Dukes (warren.dukes@gmail.com) + * This project's homepage is: http://www.musicpd.org + * + * 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 2 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, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "utils.h" +#include "log.h" + +#include <stdlib.h> +#include <string.h> +#include <ctype.h> +#include <sys/types.h> +#include <sys/socket.h> +#include <sys/select.h> +#include <sys/time.h> +#include <unistd.h> +#include <assert.h> + +char *myFgets(char *buffer, int bufferSize, FILE * fp) +{ + char *ret = fgets(buffer, bufferSize, fp); + if (ret && strlen(buffer) > 0 && buffer[strlen(buffer) - 1] == '\n') { + buffer[strlen(buffer) - 1] = '\0'; + } + if (ret && strlen(buffer) > 0 && buffer[strlen(buffer) - 1] == '\r') { + buffer[strlen(buffer) - 1] = '\0'; + } + return ret; +} + +char *strDupToUpper(char *str) +{ + char *ret = xstrdup(str); + int i; + + for (i = 0; i < strlen(str); i++) + ret[i] = toupper((int)ret[i]); + + return ret; +} + +void stripReturnChar(char *string) +{ + while (string && (string = strchr(string, '\n'))) { + *string = ' '; + } +} + +void my_usleep(long usec) +{ + struct timeval tv; + + tv.tv_sec = 0; + tv.tv_usec = usec; + + select(0, NULL, NULL, NULL, &tv); +} + +int ipv6Supported(void) +{ +#ifdef HAVE_IPV6 + int s; + s = socket(AF_INET6, SOCK_STREAM, 0); + if (s == -1) + return 0; + close(s); + return 1; +#endif + return 0; +} + +char *appendToString(char *dest, const char *src) +{ + int destlen; + int srclen = strlen(src); + + if (dest == NULL) { + dest = xmalloc(srclen + 1); + memset(dest, 0, srclen + 1); + destlen = 0; + } else { + destlen = strlen(dest); + dest = xrealloc(dest, destlen + srclen + 1); + } + + memcpy(dest + destlen, src, srclen); + dest[destlen + srclen] = '\0'; + + return dest; +} + +unsigned long readLEuint32(const unsigned char *p) +{ + return ((unsigned long)p[0] << 0) | + ((unsigned long)p[1] << 8) | + ((unsigned long)p[2] << 16) | ((unsigned long)p[3] << 24); +} + +mpd_malloc char *xstrdup(const char *s) +{ + char *ret = strdup(s); + if (mpd_unlikely(!ret)) + FATAL("OOM: strdup\n"); + return ret; +} + +/* borrowed from git :) */ + +mpd_malloc void *xmalloc(size_t size) +{ + void *ret; + + assert(mpd_likely(size)); + + ret = malloc(size); + if (mpd_unlikely(!ret)) + FATAL("OOM: malloc\n"); + return ret; +} + +mpd_malloc void *xrealloc(void *ptr, size_t size) +{ + void *ret = realloc(ptr, size); + + /* some C libraries return NULL when size == 0, + * make sure we get a free()-able pointer (free(NULL) + * doesn't work with all C libraries, either) */ + if (mpd_unlikely(!ret && !size)) + ret = realloc(ptr, 1); + + if (mpd_unlikely(!ret)) + FATAL("OOM: realloc\n"); + return ret; +} + +mpd_malloc void *xcalloc(size_t nmemb, size_t size) +{ + void *ret; + + assert(mpd_likely(nmemb && size)); + + ret = calloc(nmemb, size); + if (mpd_unlikely(!ret)) + FATAL("OOM: calloc\n"); + return ret; +} + + |