-
Notifications
You must be signed in to change notification settings - Fork 87
Expand file tree
/
Copy pathpsp_string.c
More file actions
91 lines (79 loc) · 2.16 KB
/
psp_string.c
File metadata and controls
91 lines (79 loc) · 2.16 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
/*
* Copyright (C) 2000, 2001, 2013 Gregory Trubetskoy
* Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License"); you
* may not use this file except in compliance with the License. You
* may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied. See the License for the specific language governing
* permissions and limitations under the License.
*
* Originally developed by Gregory Trubetskoy.
*
*
*
* See accompanying documentation and source code comments
* for details.
*
*/
#include "psp_string.h"
#define psp_string_alloc(__pspstring, __length) \
if ((__length) > (__pspstring)->allocated) { \
(__pspstring)->blob = realloc((__pspstring)->blob, (__length) + PSP_STRING_BLOCK); \
(__pspstring)->allocated = (__length) + PSP_STRING_BLOCK; \
}
void
psp_string_0(psp_string *s)
{
if (!s->length) {
return;
}
s->blob[s->length] = '\0';
}
void
psp_string_appendl(psp_string *s, char *text, size_t length)
{
int newlen = s->length + length;
if (text == NULL) {
return;
}
psp_string_alloc(s, newlen);
memcpy(s->blob + s->length, text, length);
s->length = newlen;
}
void
psp_string_append(psp_string *s, char *text)
{
if (text == NULL) {
return;
}
psp_string_appendl(s, text, strlen(text));
}
void
psp_string_appendc(psp_string *s, char c)
{
int newlen = s->length + 1;
psp_string_alloc(s, newlen);
s->blob[s->length] = c;
s->length = newlen;
}
void
psp_string_clear(psp_string *s)
{
memset(s->blob, 0, s->length);
s->length = 0;
}
void
psp_string_free(psp_string *s)
{
free(s->blob);
s->blob = NULL;
s->length = 0;
s->allocated = 0;
}