input: Only use header buffer for modules that need it.
The buffer was leaking into modules that didn't ask for it.
This commit is contained in:
parent
0a4d68f74b
commit
115fbe9410
|
@ -376,7 +376,7 @@ SR_API const struct sr_input *sr_input_scan_file(const char *filename)
|
||||||
struct sr_input *in;
|
struct sr_input *in;
|
||||||
const struct sr_input_module *imod;
|
const struct sr_input_module *imod;
|
||||||
GHashTable *meta;
|
GHashTable *meta;
|
||||||
GString *buf;
|
GString *header_buf;
|
||||||
struct stat st;
|
struct stat st;
|
||||||
unsigned int midx, m, i;
|
unsigned int midx, m, i;
|
||||||
int fd;
|
int fd;
|
||||||
|
@ -405,8 +405,10 @@ SR_API const struct sr_input *sr_input_scan_file(const char *filename)
|
||||||
/* TODO: MIME type */
|
/* TODO: MIME type */
|
||||||
|
|
||||||
in = NULL;
|
in = NULL;
|
||||||
buf = NULL;
|
header_buf = g_string_sized_new(128);
|
||||||
for (i = 0; input_module_list[i]; i++) {
|
for (i = 0; input_module_list[i]; i++) {
|
||||||
|
g_string_truncate(header_buf, 0);
|
||||||
|
|
||||||
imod = input_module_list[i];
|
imod = input_module_list[i];
|
||||||
if (!imod->metadata[0]) {
|
if (!imod->metadata[0]) {
|
||||||
/* Module has no metadata for matching so will take
|
/* Module has no metadata for matching so will take
|
||||||
|
@ -420,28 +422,30 @@ SR_API const struct sr_input *sr_input_scan_file(const char *filename)
|
||||||
meta = g_hash_table_new(NULL, NULL);
|
meta = g_hash_table_new(NULL, NULL);
|
||||||
for (m = 0; m < sizeof(imod->metadata); m++) {
|
for (m = 0; m < sizeof(imod->metadata); m++) {
|
||||||
mitem = imod->metadata[m] & ~SR_INPUT_META_REQUIRED;
|
mitem = imod->metadata[m] & ~SR_INPUT_META_REQUIRED;
|
||||||
|
if (!mitem)
|
||||||
|
/* Metadata list is 0-terminated. */
|
||||||
|
break;
|
||||||
if (mitem == SR_INPUT_META_FILENAME)
|
if (mitem == SR_INPUT_META_FILENAME)
|
||||||
g_hash_table_insert(meta, GINT_TO_POINTER(mitem),
|
g_hash_table_insert(meta, GINT_TO_POINTER(mitem),
|
||||||
(gpointer)filename);
|
(gpointer)filename);
|
||||||
else if (mitem == SR_INPUT_META_FILESIZE)
|
else if (mitem == SR_INPUT_META_FILESIZE) {
|
||||||
|
sr_dbg("inserting fs %d", st.st_size);
|
||||||
g_hash_table_insert(meta, GINT_TO_POINTER(mitem),
|
g_hash_table_insert(meta, GINT_TO_POINTER(mitem),
|
||||||
GINT_TO_POINTER(st.st_size));
|
GINT_TO_POINTER(st.st_size));
|
||||||
else if (mitem == SR_INPUT_META_HEADER) {
|
} else if (mitem == SR_INPUT_META_HEADER) {
|
||||||
buf = g_string_sized_new(128);
|
|
||||||
if ((fd = open(filename, O_RDONLY)) < 0) {
|
if ((fd = open(filename, O_RDONLY)) < 0) {
|
||||||
sr_err("%s", strerror(errno));
|
sr_err("%s", strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
size = read(fd, buf->str, 128);
|
size = read(fd, header_buf->str, 128);
|
||||||
buf->len = size;
|
header_buf->len = size;
|
||||||
close(fd);
|
close(fd);
|
||||||
if (size <= 0) {
|
if (size <= 0) {
|
||||||
g_string_free(buf, TRUE);
|
g_string_free(header_buf, TRUE);
|
||||||
sr_err("%s", strerror(errno));
|
sr_err("%s", strerror(errno));
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
g_hash_table_insert(meta, GINT_TO_POINTER(mitem), buf);
|
g_hash_table_insert(meta, GINT_TO_POINTER(mitem), header_buf);
|
||||||
g_string_free(buf, TRUE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (g_hash_table_size(meta) == 0) {
|
if (g_hash_table_size(meta) == 0) {
|
||||||
|
@ -459,8 +463,7 @@ SR_API const struct sr_input *sr_input_scan_file(const char *filename)
|
||||||
g_string_insert_len(in->buf, 0, buf->str, buf->len);
|
g_string_insert_len(in->buf, 0, buf->str, buf->len);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (!in && buf)
|
g_string_free(header_buf, TRUE);
|
||||||
g_string_free(buf, TRUE);
|
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue