1.1 --- a/core/sm_stringutil.cpp Fri Dec 29 23:18:13 2006 +0000
1.2 +++ b/core/sm_stringutil.cpp Fri Dec 29 23:28:44 2006 +0000
1.3 @@ -1,3 +1,5 @@
1.4 +#include <stdlib.h>
1.5 +#include <ctype.h>
1.6 #include "sm_stringutil.h"
1.7
1.8 #define ALT 0x00000001 /* alternate form */
1.9 @@ -262,7 +264,7 @@
1.10 int n;
1.11 char sign;
1.12 const char *fmt;
1.13 - size_t llen = maxlen;
1.14 + size_t llen = maxlen - 1;
1.15
1.16 buf_p = buffer;
1.17 arg = *param;
1.18 @@ -337,7 +339,7 @@
1.19 case 'c':
1.20 {
1.21 CHECK_ARGS(0);
1.22 - if (llen <= 1)
1.23 + if (!llen)
1.24 {
1.25 goto done;
1.26 }
1.27 @@ -387,7 +389,7 @@
1.28 }
1.29 case '%':
1.30 {
1.31 - if (llen <= 1)
1.32 + if (!llen)
1.33 {
1.34 goto done;
1.35 }
1.36 @@ -397,7 +399,7 @@
1.37 }
1.38 case '\0':
1.39 {
1.40 - if (llen <= 1)
1.41 + if (!llen)
1.42 {
1.43 goto done;
1.44 }
1.45 @@ -407,7 +409,7 @@
1.46 }
1.47 default:
1.48 {
1.49 - if (llen <= 1)
1.50 + if (!llen)
1.51 {
1.52 goto done;
1.53 }
1.54 @@ -423,3 +425,61 @@
1.55 *param = arg;
1.56 return (maxlen - llen);
1.57 }
1.58 +
1.59 +const char *stristr(const char *str, const char *substr)
1.60 +{
1.61 + if (!*substr)
1.62 + {
1.63 + return ((char *)str);
1.64 + }
1.65 +
1.66 + char *needle = (char *)substr;
1.67 + char *prevloc = (char *)str;
1.68 + char *haystack = (char *)str;
1.69 +
1.70 + while (*haystack)
1.71 + {
1.72 + if (tolower(*haystack) == tolower(*needle))
1.73 + {
1.74 + haystack++;
1.75 + if (!*++needle)
1.76 + {
1.77 + return prevloc;
1.78 + }
1.79 + } else {
1.80 + haystack = ++prevloc;
1.81 + needle = (char *)substr;
1.82 + }
1.83 + }
1.84 +
1.85 + return NULL;
1.86 +}
1.87 +
1.88 +inline int StrConvInt(const char *str)
1.89 +{
1.90 + char *dummy;
1.91 + return strtol(str, &dummy, 10);
1.92 +}
1.93 +
1.94 +inline float StrConvFloat(const char *str)
1.95 +{
1.96 + char *dummy;
1.97 + return (float)strtod(str, &dummy);
1.98 +}
1.99 +
1.100 +int strncopy(char *dest, const char *src, size_t count)
1.101 +{
1.102 + if (!count)
1.103 + {
1.104 + return 0;
1.105 + }
1.106 +
1.107 + char *start = dest;
1.108 + while ((*src) && (--count))
1.109 + {
1.110 + *dest++ = *src++;
1.111 + }
1.112 + *dest = '\0';
1.113 +
1.114 + return (dest - start);
1.115 +}