~ubuntu-branches/ubuntu/karmic/mpg123/karmic

« back to all changes in this revision

Viewing changes to src/libmpg123/stringbuf.c

  • Committer: Bazaar Package Importer
  • Author(s): César Muñoz Albitres
  • Date: 2009-05-03 17:55:27 UTC
  • mfrom: (6.2.2 squeeze)
  • Revision ID: james.westby@ubuntu.com-20090503175527-z94edsnxmiccxpy8
Tags: 1.7.2-3ubuntu1
* Merge from debian unstable, remaining changes:
  - Remove arts from dependencies

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
        mpg123_init_string(sb);
27
27
}
28
28
 
 
29
int attribute_align_arg mpg123_grow_string(mpg123_string* sb, size_t new)
 
30
{
 
31
        if(sb->size < new) return mpg123_resize_string(sb, new);
 
32
        else return 1;
 
33
}
 
34
 
29
35
int attribute_align_arg mpg123_resize_string(mpg123_string* sb, size_t new)
30
36
{
31
37
        debug3("resizing string pointer %p from %lu to %lu", (void*) sb->p, (unsigned long)sb->size, (unsigned long)new);
79
85
        else return 0;
80
86
}
81
87
 
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)
83
89
{
84
 
        size_t addl = strlen(stuff)+1;
85
90
        debug1("adding %s", stuff);
86
 
        if(sb->fill)
 
91
        return mpg123_add_substring(sb, stuff, 0, strlen(stuff));
 
92
}
 
93
 
 
94
int attribute_align_arg mpg123_add_substring(mpg123_string *sb, const char *stuff, size_t from, size_t count)
 
95
{
 
96
        debug("adding a substring");
 
97
        if(sb->fill) /* includes zero byte... */
87
98
        {
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)) )
89
101
                {
90
 
                        memcpy(sb->p+sb->fill-1, stuff, addl);
91
 
                        sb->fill += addl-1;
 
102
                        memcpy(sb->p+sb->fill-1, stuff+from, count);
 
103
                        sb->fill += count;
 
104
                        sb->p[sb->fill-1] = 0; /* Terminate! */
92
105
                }
93
106
                else return 0;
94
107
        }
95
108
        else
96
109
        {
97
 
                if(mpg123_resize_string(sb, addl))
 
110
                if( count < SIZE_MAX && mpg123_grow_string(sb, count+1) )
98
111
                {
99
 
                        memcpy(sb->p, stuff, addl);
100
 
                        sb->fill = addl;
 
112
                        memcpy(sb->p, stuff+from, count);
 
113
                        sb->fill = count+1;
 
114
                        sb->p[sb->fill-1] = 0; /* Terminate! */
101
115
                }
102
116
                else return 0;
103
117
        }
104
118
        return 1;
105
119
}
106
120
 
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)
 
122
{
 
123
        sb->fill = 0;
 
124
        return mpg123_add_substring(sb, stuff, from, count);
 
125
}
 
126
 
 
127
int attribute_align_arg mpg123_set_string(mpg123_string* sb, const char* stuff)
108
128
{
109
129
        sb->fill = 0;
110
130
        return mpg123_add_string(sb, stuff);