X-Git-Url: https://git.deb.at/?a=blobdiff_plain;f=misc.c;h=6c96c5acbc6b65b5f43b18dad749460fc9a4da9d;hb=7a7531e544d236d58ca077ce56b7d6d0c60faa09;hp=225d1563f9e048b981bff605bb7283e6ad9c189e;hpb=49aa0214d72eb609845e292772819de414034c55;p=pkg%2Fabook.git diff --git a/misc.c b/misc.c index 225d156..6c96c5a 100644 --- a/misc.c +++ b/misc.c @@ -2,24 +2,25 @@ /* * $Id$ * - * by JH + * by JH * * Copyright (C) Jaakko Heinonen */ -#define ABOOK_SRC 1 -/*#undef ABOOK_SRC*/ - #include #include #include #include #include #include -#include "misc.h" -#ifdef ABOOK_SRC -# include "abook.h" +#ifdef HAVE_CONFIG_H +# include "config.h" #endif +#ifdef HANDLE_MULTIBYTE +# include +#endif +#include "misc.h" +#include "xmalloc.h" #ifndef DEBUG # define NDEBUG 1 @@ -29,39 +30,13 @@ #include -char * -revstr(char *str) -{ - char *s, *s2; - - s = s2 = strdup(str); - - while( *str ) - str++; - - while( *s ) - *--str = *s++; - - free(s2); - return str; -} - -char * -strupper(char *str) -{ - char *tmp = str; - - while( ( *str = toupper( *str ) ) ) - str++; - - return tmp; -} - char * strlower(char *str) { char *tmp = str; + assert(str != NULL); + while( ( *str = tolower ( *str ) ) ) str++; @@ -75,12 +50,12 @@ strtrim(char *s) assert(s != NULL); - for(t = s; ISSPACE(*t); t++); + for(t = s; isspace(*t); t++); memmove(s, t, strlen(t)+1); for (tt = t = s; *t != '\0'; t++) - if(!ISSPACE(*t)) + if(!isspace(*t)) tt = t+1; *tt = '\0'; @@ -108,14 +83,11 @@ char * mkstr (const char *format, ... ) { MY_VA_LOCAL_DECL; - int size = 100; - char *buffer = -#ifdef ABOOK_SRC - (char *) abook_malloc (size); -#else - (char *) malloc (size); -#endif + size_t size = 100; + char *buffer = xmalloc (size); + assert(format != NULL); + for(;;) { int n; MY_VA_START(format); @@ -131,12 +103,7 @@ mkstr (const char *format, ... ) else size *= 2; - buffer = -#ifdef ABOOK_SRC - (char *) abook_realloc (buffer, size); -#else - (char *) realloc (buffer, size); -#endif + buffer = xrealloc (buffer, size); } } @@ -144,12 +111,11 @@ mkstr (const char *format, ... ) char* strconcat (const char *str, ...) { - int l; + unsigned long l; MY_VA_LOCAL_DECL; char *s, *concat; - if(str == NULL) - return NULL; + assert(str != NULL); l = 1 + strlen (str); MY_VA_START(str); @@ -161,11 +127,9 @@ strconcat (const char *str, ...) MY_VA_END; concat = (char *) -#ifdef ABOOK_SRC - abook_malloc(l); -#else - malloc(l); -#endif + xmalloc(l); + if(concat == NULL) + return NULL; strcpy (concat, str); MY_VA_START(str); @@ -181,7 +145,7 @@ strconcat (const char *str, ...) int -safe_strcmp(const char *s1, const char * s2) +safe_strcmp(const char *s1, const char *s2) { if (s1 == NULL && s2 == NULL) return 0; if (s1 == NULL) return -1; @@ -190,25 +154,39 @@ safe_strcmp(const char *s1, const char * s2) return strcmp(s1, s2); } +int +safe_strcoll(const char *s1, const char *s2) +{ +#ifdef HAVE_STRCOLL + if (s1 == NULL && s2 == NULL) return 0; + if (s1 == NULL) return -1; + if (s2 == NULL) return 1; + + return strcoll(s1, s2); +#else /* fall back to strcmp */ + return safe_strcmp(s1, s2); +#endif +} + char * my_getcwd() { char *dir = NULL; - int size = 100; + size_t size = 100; - dir = malloc(size); + if( (dir = xmalloc(size)) == NULL) + return NULL; + + *dir = 0; while( getcwd(dir, size) == NULL && errno == ERANGE ) - dir = realloc(dir, size *=2); + if( (dir = xrealloc(dir, size *=2)) == NULL) + return NULL; return dir; } #define INITIAL_SIZE 128 -#ifndef ABOOK_SRC -# define abook_malloc(X) malloc(X) -# define abook_realloc(X, XX) realloc(X, XX) -#endif char * getaline(FILE *f) @@ -232,7 +210,7 @@ getaline(FILE *f) len = 0; size = thres; - buf = (char *)abook_malloc(size); + buf = xmalloc(size); while (fgets(buf+len, size-len, f) != NULL) { len += strlen(buf+len); @@ -240,7 +218,8 @@ getaline(FILE *f) break; /* the whole line has been read */ for (inc = size, p = NULL; inc > mininc; inc /= 2) - if ((p = abook_realloc(buf, size + inc)) != NULL) + if ((p = xrealloc(buf, size + inc)) != + NULL) break; size += inc; @@ -248,7 +227,7 @@ getaline(FILE *f) } if (len == 0) { - free(buf); + xfree(buf); return NULL; /* nothing read (eof or error) */ } @@ -256,7 +235,7 @@ getaline(FILE *f) buf[--len] = '\0'; if (size - len > mucho) { /* a plenitude of unused memory? */ - p = abook_realloc(buf, len+1); + p = xrealloc(buf, len+1); if (p != NULL) { buf = p; size = len+1; @@ -266,6 +245,28 @@ getaline(FILE *f) return buf; } +int +strwidth(const char *s) +{ + assert(s); +#ifdef HANDLE_MULTIBYTE + return (int)mbswidth(s, 0); +#else + return strlen(s); +#endif +} + +int +bytes2width(const char *s, int width) +{ + assert(s); +#ifdef HANDLE_MULTIBYTE + return mbsnbytes(s, strlen(s), width, 0); +#else + return width; +#endif +} + /************************************************************** * Original: * Patrick Powell Tue Apr 11 09:48:21 PDT 1995