summaryrefslogtreecommitdiffstats
path: root/stream
diff options
context:
space:
mode:
Diffstat (limited to 'stream')
-rw-r--r--stream/stream.c18
-rw-r--r--stream/stream.h2
2 files changed, 20 insertions, 0 deletions
diff --git a/stream/stream.c b/stream/stream.c
index b17b7fc19a..4650535890 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -742,6 +742,7 @@ static int stream_enable_cache(stream_t **stream, int64_t size, int64_t min,
cache->url = talloc_strdup(cache, orig->url);
cache->mime_type = talloc_strdup(cache, orig->mime_type);
cache->lavf_type = talloc_strdup(cache, orig->lavf_type);
+ cache->safe_origin = orig->safe_origin;
cache->opts = orig->opts;
cache->start_pos = orig->start_pos;
cache->end_pos = orig->end_pos;
@@ -862,6 +863,8 @@ unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
int len;
const unsigned char *end;
unsigned char *ptr = mem;
+ if (utf16 == -1)
+ utf16 = 0;
if (max < 1)
return NULL;
max--; // reserve one for 0-termination
@@ -891,6 +894,21 @@ unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
return mem;
}
+static const char *bom[3] = {"\xEF\xBB\xBF", "\xFF\xFE", "\xFE\xFF"};
+
+// Return utf16 argument for stream_read_line
+int stream_skip_bom(struct stream *s)
+{
+ bstr data = stream_peek(s, 4);
+ for (int n = 0; n < 3; n++) {
+ if (bstr_startswith0(data, bom[n])) {
+ stream_skip(s, strlen(bom[n]));
+ return n;
+ }
+ }
+ return -1; // default to 8 bit codepages
+}
+
// Read the rest of the stream into memory (current pos to EOF), and return it.
// talloc_ctx: used as talloc parent for the returned allocation
// max_size: must be set to >0. If the file is larger than that, it is treated
diff --git a/stream/stream.h b/stream/stream.h
index f19ab4203f..27043206c9 100644
--- a/stream/stream.h
+++ b/stream/stream.h
@@ -150,6 +150,7 @@ typedef struct stream {
char *mime_type; // when HTTP streaming is used
char *demuxer; // request demuxer to be used
char *lavf_type; // name of expected demuxer type for lavf
+ bool safe_origin; // used for playlists that can be opened safely
struct MPOpts *opts;
FILE *capture_file;
@@ -208,6 +209,7 @@ inline static uint64_t stream_read_qword(stream_t *s)
unsigned char *stream_read_line(stream_t *s, unsigned char *mem, int max,
int utf16);
+int stream_skip_bom(struct stream *s);
inline static int stream_eof(stream_t *s)
{