--- deliantra/server/common/utils.C 2006/09/10 16:00:23 1.9 +++ deliantra/server/common/utils.C 2006/09/12 21:10:31 1.13 @@ -1,9 +1,3 @@ - -/* - * static char *rcsid_utils_c = - * "$Id: utils.C,v 1.9 2006/09/10 16:00:23 root Exp $"; - */ - /* CrossFire, A Multiplayer game for X-windows @@ -533,6 +527,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 +541,41 @@ } else strcpy (input, tmp); + return; } -void * - zero_initialised::operator -new (size_t s) +void *alloc (int s) throw (std::bad_alloc) { - //return calloc (1, s); - return g_slice_alloc0 (s); -} + void *p = g_slice_alloc (s); -void * - zero_initialised::operator -new[] (size_t s) -{ - //return calloc (1, s); - return g_slice_alloc0 (s); -} + if (!p) + throw std::bad_alloc (); -void - zero_initialised::operator -delete (void *p, size_t s) -{ - //free (p); return; - g_slice_free1 (s, p); + return p; } -void - zero_initialised::operator -delete[] (void *p, size_t s) +void assign (char *dst, const char *src, int maxlen) { - //free (p); return; - g_slice_free1 (s, p); + 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); } +