26
26
mpg123_init_string(sb);
29
int attribute_align_arg mpg123_grow_string(mpg123_string* sb, size_t new)
31
if(sb->size < new) return mpg123_resize_string(sb, new);
29
35
int attribute_align_arg mpg123_resize_string(mpg123_string* sb, size_t new)
31
37
debug3("resizing string pointer %p from %lu to %lu", (void*) sb->p, (unsigned long)sb->size, (unsigned long)new);
82
int attribute_align_arg mpg123_add_string(mpg123_string* sb, char* stuff)
88
int attribute_align_arg mpg123_add_string(mpg123_string* sb, const char* stuff)
84
size_t addl = strlen(stuff)+1;
85
90
debug1("adding %s", stuff);
91
return mpg123_add_substring(sb, stuff, 0, strlen(stuff));
94
int attribute_align_arg mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count)
96
debug("adding a substring");
97
if(sb->fill) /* includes zero byte... */
88
if(sb->size >= sb->fill-1+addl || mpg123_resize_string(sb, sb->fill-1+addl))
99
if( (SIZE_MAX - sb->fill >= count) /* Avoid overflow. */
100
&& (sb->size >= sb->fill+count || mpg123_grow_string(sb, sb->fill+count)) )
90
memcpy(sb->p+sb->fill-1, stuff, addl);
102
memcpy(sb->p+sb->fill-1, stuff+from, count);
104
sb->p[sb->fill-1] = 0; /* Terminate! */
97
if(mpg123_resize_string(sb, addl))
110
if( count < SIZE_MAX && mpg123_grow_string(sb, count+1) )
99
memcpy(sb->p, stuff, addl);
112
memcpy(sb->p, stuff+from, count);
114
sb->p[sb->fill-1] = 0; /* Terminate! */
107
int attribute_align_arg mpg123_set_string(mpg123_string* sb, char* stuff)
121
int attribute_align_arg mpg123_set_substring(mpg123_string* sb, const char* stuff, size_t from, size_t count)
124
return mpg123_add_substring(sb, stuff, from, count);
127
int attribute_align_arg mpg123_set_string(mpg123_string* sb, const char* stuff)
110
130
return mpg123_add_string(sb, stuff);