summaryrefslogtreecommitdiffstats
path: root/polyp/tagstruct.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2004-09-19 23:12:41 +0000
committerLennart Poettering <lennart@poettering.net>2004-09-19 23:12:41 +0000
commitb118982674effa44aa1687e8bd0d2bc0eb6254b2 (patch)
treeb2a63ba549b374f94a1dec9c1e4e07e05f0b8058 /polyp/tagstruct.c
parent70a30530e03ed4c43639575a479d77e38fea56ea (diff)
remove obnoxious assert from module-combine
tagstruct: add support for NULL strings improve pactl correct pa_bytes_snprint() pa_sample_spec_snprint(): don't fail on invalid sample spec rename PA_SAMPLE_SNPRINT_MAX_LENGTH to PA_SAMPLE_SPEC_SNPRINT_MAX git-svn-id: file:///home/lennart/svn/public/pulseaudio/trunk@222 fefdeb5f-60dc-0310-8127-8f9354f1896f
Diffstat (limited to 'polyp/tagstruct.c')
-rw-r--r--polyp/tagstruct.c28
1 files changed, 22 insertions, 6 deletions
diff --git a/polyp/tagstruct.c b/polyp/tagstruct.c
index d571b713..39ae87b5 100644
--- a/polyp/tagstruct.c
+++ b/polyp/tagstruct.c
@@ -33,6 +33,7 @@
enum tags {
TAG_STRING = 't',
+ TAG_NULL_STRING = 'N',
TAG_U32 = 'L',
TAG_S32 = 'l',
TAG_U16 = 'S',
@@ -97,12 +98,18 @@ static void extend(struct pa_tagstruct*t, size_t l) {
void pa_tagstruct_puts(struct pa_tagstruct*t, const char *s) {
size_t l;
- assert(t && s);
- l = strlen(s)+2;
- extend(t, l);
- t->data[t->length] = TAG_STRING;
- strcpy((char*) (t->data+t->length+1), s);
- t->length += l;
+ assert(t);
+ if (s) {
+ l = strlen(s)+2;
+ extend(t, l);
+ t->data[t->length] = TAG_STRING;
+ strcpy((char*) (t->data+t->length+1), s);
+ t->length += l;
+ } else {
+ extend(t, 1);
+ t->data[t->length] = TAG_NULL_STRING;
+ t->length += 1;
+ }
}
void pa_tagstruct_putu32(struct pa_tagstruct*t, uint32_t i) {
@@ -173,6 +180,15 @@ int pa_tagstruct_gets(struct pa_tagstruct*t, const char **s) {
char *c;
assert(t && s);
+ if (t->rindex+1 > t->length)
+ return -1;
+
+ if (t->data[t->rindex] == TAG_NULL_STRING) {
+ t->rindex++;
+ *s = NULL;
+ return 0;
+ }
+
if (t->rindex+2 > t->length)
return -1;