]> git.deb.at Git - pkg/abook.git/blobdiff - misc.c
- replace abook_malloc, abook_realloc and my_free with new xmalloc routines
[pkg/abook.git] / misc.c
diff --git a/misc.c b/misc.c
index 225d1563f9e048b981bff605bb7283e6ad9c189e..6c96c5acbc6b65b5f43b18dad749460fc9a4da9d 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -2,24 +2,25 @@
 /*
  * $Id$
  *
- * by JH <jheinonen@bigfoot.com>
+ * by JH <jheinonen@users.sourceforge.net>
  *
  * Copyright (C) Jaakko Heinonen
  */
 
-#define ABOOK_SRC      1
-/*#undef ABOOK_SRC*/
-
 #include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <ctype.h>
 #include <unistd.h>
 #include <errno.h>
-#include "misc.h"
-#ifdef ABOOK_SRC
-#      include "abook.h"
+#ifdef HAVE_CONFIG_H
+#      include "config.h"
 #endif
+#ifdef HANDLE_MULTIBYTE
+#      include <mbswidth.h>
+#endif
+#include "misc.h"
+#include "xmalloc.h"
 
 #ifndef DEBUG
 #      define NDEBUG   1
 
 #include <assert.h>
 
-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