--- deliantra/server/common/utils.C 2006/09/10 16:00:23 1.9 +++ deliantra/server/common/utils.C 2006/09/12 19:20:06 1.11 @@ -1,7 +1,7 @@ /* * static char *rcsid_utils_c = - * "$Id: utils.C,v 1.9 2006/09/10 16:00:23 root Exp $"; + * "$Id: utils.C,v 1.11 2006/09/12 19:20:06 root Exp $"; */ /* @@ -533,6 +533,7 @@ /*trim all trailing commas, spaces etc. */ for (i = strlen (tmp); !isalnum (tmp[i]) && i >= 0; i--) tmp[i] = '\0'; + strcat (tmp, "."); p = strrchr (tmp, ','); @@ -546,37 +547,66 @@ } else strcpy (input, tmp); + return; } void * - zero_initialised::operator -new (size_t s) +zero_initialised::operator new (size_t s, void *p) +{ + memset (p, 0, s); + return p; +} + +void * +zero_initialised::operator new (size_t s) { //return calloc (1, s); return g_slice_alloc0 (s); } void * - zero_initialised::operator -new[] (size_t s) + zero_initialised::operator new[] (size_t s) { //return calloc (1, s); return g_slice_alloc0 (s); } void - zero_initialised::operator -delete (void *p, size_t s) +zero_initialised::operator delete (void *p, size_t s) { //free (p); return; g_slice_free1 (s, p); } void - zero_initialised::operator -delete[] (void *p, size_t s) +zero_initialised::operator delete[] (void *p, size_t s) { //free (p); return; g_slice_free1 (s, p); } + +void assign (char *dst, const char *src, int maxlen) +{ + if (!src) + src = ""; + + int len = strlen (src); + + if (len >= maxlen - 1) + { + if (maxlen <= 4) + { + memset (dst, '.', maxlen - 1); + dst [maxlen - 1] = 0; + } + else + { + memcpy (dst, src, maxlen - 4); + memcpy (dst + maxlen - 4, "...", 4); + } + } + else + memcpy (dst, src, len + 1); +} +