ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/ermyth/src/string.C
Revision: 1.6
Committed: Wed Sep 5 11:23:15 2007 UTC (16 years, 8 months ago) by pippijn
Content type: text/plain
Branch: MAIN
Changes since 1.5: +33 -1 lines
Log Message:
removed GPLed code and put license back to BSD

File Contents

# Content
1 /*
2 * Copyright © 2005 Atheme Development Group
3 * Rights to this code are documented in doc/pod/license.pod.
4 *
5 * String functions.
6 */
7
8 static char const rcsid[] = "$Id: string.C,v 1.5 2007-08-30 19:56:26 pippijn Exp $";
9
10 #include "atheme.h"
11 #include <common/string.h>
12
13 char *
14 sstrdup (char const * const s)
15 {
16 char *t;
17 size_t len;
18
19 if (s == NULL)
20 return NULL;
21
22 t = salloc<char> (len = strlen (s) + 1);
23
24 strlcpy (t, s, len);
25 return t;
26 }
27
28 char *
29 sstrndup (char const *s, int len)
30 {
31 char *t;
32
33 if (s == NULL)
34 return NULL;
35
36 t = salloc<char> (len + 1);
37
38 strlcpy (t, s, len);
39 return t;
40 }
41
42 void
43 assign (char *dst, char const *src, size_t maxlen)
44 {
45 if (!src)
46 src = "";
47
48 size_t len = strlen (src);
49
50 if (len >= maxlen - 1)
51 {
52 if (maxlen <= 4)
53 {
54 memset (dst, '.', maxlen - 1);
55 dst [maxlen - 1] = 0;
56 }
57 else
58 {
59 memcpy (dst, src, maxlen - 4);
60 memcpy (dst + maxlen - 4, "...", 4);
61 }
62 }
63 else
64 memcpy (dst, src, len + 1);
65 }
66
67 #ifndef HAVE_STRLCAT
68 /* These functions are taken from Linux. */
69 size_t
70 strlcat (char *dest, char const *src, size_t count)
71 {
72 size_t dsize = strlen (dest);
73 size_t len = strlen (src);
74 size_t res = dsize + len;
75
76 dest += dsize;
77 count -= dsize;
78 if (len >= count)
79 len = count - 1;
80 memcpy (dest, src, len);
81 dest[len] = 0;
82 return res;
83 }
84 #endif
85
86 #ifndef HAVE_STRLCPY
87 size_t
88 strlcpy (char *dest, char const *src, size_t size)
89 {
90 size_t ret = strlen (src);
91
92 if (size)
93 {
94 size_t len = (ret >= size) ? size - 1 : ret;
95 memcpy (dest, src, len);
96 dest[len] = '\0';
97 }
98 return ret;
99 }
100 #endif
101
102 /* removes unwanted chars from a line */
103 char const *
104 strip (char *line)
105 {
106 char *c = 0;
107
108 if (line)
109 {
110 if ((c = strchr (line, '\n')))
111 *c = '\0';
112 if ((c = strchr (line, '\r')))
113 *c = '\0';
114 if ((c = strchr (line, '\1')))
115 *c = '\0';
116 }
117
118 return c;
119 }
120
121 int
122 dynstr::add (char c)
123 {
124 if (length - pos <= 1)
125 {
126 size_t new_size = std::max (length * 2, pos + 9);
127 length = new_size;
128 m_rep = new char[new_size];
129 }
130 m_rep[pos] = c;
131 m_rep[++pos] = '\0';
132
133 return length;
134 }
135
136 int
137 dynstr::add (char const *src, size_t len)
138 {
139 if (length - pos <= len)
140 {
141 size_t new_size = std::max (length * 2, pos + len + 8);
142 length = new_size;
143 m_rep = new char[new_size];
144 }
145 memcpy (m_rep + pos, src, len);
146 pos += len;
147 m_rep[pos] = '\0';
148
149 return len;
150 }