]> code.citadel.org Git - citadel.git/blobdiff - citadel/tools.c
WebCit 7.13
[citadel.git] / citadel / tools.c
index 0f85643ee1ad003b2db388e7bf0bc17af6103136..5f225ccbddc03e814a3a02bb53e1eade2f7150a7 100644 (file)
@@ -42,11 +42,18 @@ char *ascmonths[12] = {
 
 char *safestrncpy(char *dest, const char *src, size_t n)
 {
+       int i = 0;
+
        if (dest == NULL || src == NULL) {
                fprintf(stderr, "safestrncpy: NULL argument\n");
                abort();
        }
-       strncpy(dest, src, n);
+
+       do {
+               dest[i] = src[i];
+               if (dest[i] == 0) return(dest);
+               ++i;
+       } while (i<n);
        dest[n - 1] = 0;
        return dest;
 }
@@ -75,15 +82,22 @@ int strncasecmp(char *lstr, char *rstr, int len)
 /*
  * num_tokens()  -  discover number of parameters/tokens in a string
  */
-int num_tokens(const char *source, char tok) {
-       int a;
+int num_tokens(const char *source, char tok)
+{
        int count = 1;
+       const char *ptr = source;
 
-       if (source == NULL) return(0);
-       for (a=0; a<strlen(source); ++a) {
-               if (source[a]==tok) ++count;
+       if (source == NULL) {
+               return (0);
        }
-       return(count);
+
+       while (*ptr != '\0') {
+               if (*ptr++ == tok) {
+                       ++count;
+               }
+       }
+       
+       return (count);
 }