/* * Copyright © 2005 Atheme Development Group * Rights to this code are documented in doc/pod/license.pod. * * String functions. */ static char const rcsid[] = "$Id: string.C,v 1.5 2007/08/30 19:56:26 pippijn Exp $"; #include "atheme.h" char * sstrdup (char const * const s) { char *t; size_t len; if (s == NULL) return NULL; t = salloc (len = strlen (s) + 1); strlcpy (t, s, len); return t; } char * sstrndup (char const *s, int len) { char *t; if (s == NULL) return NULL; t = salloc (len + 1); strlcpy (t, s, len); return t; } void assign (char *dst, char const *src, size_t maxlen) { if (!src) src = ""; size_t 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); } #ifndef HAVE_STRLCAT /* These functions are taken from Linux. */ size_t strlcat (char *dest, char const *src, size_t count) { size_t dsize = strlen (dest); size_t len = strlen (src); size_t res = dsize + len; dest += dsize; count -= dsize; if (len >= count) len = count - 1; memcpy (dest, src, len); dest[len] = 0; return res; } #endif #ifndef HAVE_STRLCPY size_t strlcpy (char *dest, char const *src, size_t size) { size_t ret = strlen (src); if (size) { size_t len = (ret >= size) ? size - 1 : ret; memcpy (dest, src, len); dest[len] = '\0'; } return ret; } #endif /* removes unwanted chars from a line */ char const * strip (char *line) { char *c = 0; if (line) { if ((c = strchr (line, '\n'))) *c = '\0'; if ((c = strchr (line, '\r'))) *c = '\0'; if ((c = strchr (line, '\1'))) *c = '\0'; } return c; }