summaryrefslogtreecommitdiffstats
path: root/playtreeparser.c
diff options
context:
space:
mode:
authorUoti Urpala <uau@glyph.nonexistent.invalid>2009-01-15 05:07:09 +0200
committerUoti Urpala <uau@glyph.nonexistent.invalid>2009-01-15 05:57:31 +0200
commit9bcd12fdf5c6f85e9bb391caa2713021624a957e (patch)
tree375eac533ead90a45e7121e5ab307861b4ef52c8 /playtreeparser.c
parentd419ecd161634e79dab3ac57d57c4bccba2adcdc (diff)
parente0d66b140e1da7a793bff15003cadab79544b1dd (diff)
downloadmpv-9bcd12fdf5c6f85e9bb391caa2713021624a957e.tar.bz2
mpv-9bcd12fdf5c6f85e9bb391caa2713021624a957e.tar.xz
Merge svn changes up to r28310
The libdvdread4 and libdvdnav directories, which are externals in the svn repository, are at least for now not included in any form. I added configure checks to automatically disable internal libdvdread and libdvdnav if the corresponding directories are not present; if they're added manually then things work the same as in svn.
Diffstat (limited to 'playtreeparser.c')
-rw-r--r--playtreeparser.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/playtreeparser.c b/playtreeparser.c
index 33e472a87c..9e83cb4161 100644
--- a/playtreeparser.c
+++ b/playtreeparser.c
@@ -6,9 +6,7 @@
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-#ifdef MP_DEBUG
#include <assert.h>
-#endif
#include <errno.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -55,12 +53,15 @@ play_tree_parser_get_line(play_tree_parser_t* p) {
if(p->buffer == NULL) {
p->buffer = malloc(BUF_STEP);
p->buffer_size = BUF_STEP;
+ p->buffer[0] = 0;
p->iter = p->buffer;
}
if(p->stream->eof && (p->buffer_end == 0 || p->iter[0] == '\0'))
return NULL;
+ assert(p->buffer_end < p->buffer_size);
+ assert(!p->buffer[p->buffer_end]);
while(1) {
if(resize) {
@@ -75,10 +76,12 @@ play_tree_parser_get_line(play_tree_parser_t* p) {
r = stream_read(p->stream,p->buffer + p->buffer_end,p->buffer_size - p->buffer_end - 1);
if(r > 0) {
p->buffer_end += r;
+ assert(p->buffer_end < p->buffer_size);
p->buffer[p->buffer_end] = '\0';
while(strlen(p->buffer + p->buffer_end - r) != r)
p->buffer[p->buffer_end - r + strlen(p->buffer + p->buffer_end - r)] = '\n';
}
+ assert(!p->buffer[p->buffer_end]);
}
end = strchr(p->iter,'\n');
@@ -108,9 +111,9 @@ play_tree_parser_get_line(play_tree_parser_t* p) {
if(end[0] != '\0') {
p->buffer_end -= end-p->iter;
memmove(p->buffer,end,p->buffer_end);
- p->buffer[p->buffer_end] = '\0';
} else
p->buffer_end = 0;
+ p->buffer[p->buffer_end] = '\0';
p->iter = p->buffer;
} else
p->iter = end;
@@ -130,6 +133,7 @@ play_tree_parser_stop_keeping(play_tree_parser_t* p) {
p->buffer_end -= p->iter -p->buffer;
if(p->buffer_end)
memmove(p->buffer,p->iter,p->buffer_end);
+ p->buffer[p->buffer_end] = 0;
p->iter = p->buffer;
}
}