diff --git a/Makefile b/Makefile
index 5c1320d..7ec7028 100644
--- a/Makefile
+++ b/Makefile
@@ -118,7 +118,7 @@ inotify.o: inotify.h playlist.h
image_utils.o: image_utils.h
tivo_utils.o: config.h tivo_utils.h
tivo_beacon.o: config.h tivo_beacon.h tivo_utils.h
-tivo_commands.o: config.h tivo_commands.h tivo_utils.h
+tivo_commands.o: config.h tivo_commands.h tivo_utils.h utils.h
utils.o: utils.h
sql.o: sql.h
log.o: log.h
diff --git a/inotify.c b/inotify.c
index 6c32d24..06f1529 100644
--- a/inotify.c
+++ b/inotify.c
@@ -492,9 +492,7 @@ inotify_insert_directory(int fd, char *name, const char * path)
{
if( e->d_name[0] == '.' )
continue;
- esc_name = escape_tag(e->d_name);
- if( !esc_name )
- esc_name = strdup(e->d_name);
+ esc_name = escape_tag(e->d_name, 1);
asprintf(&path_buf, "%s/%s", path, e->d_name);
switch( e->d_type )
{
diff --git a/metadata.c b/metadata.c
index 3adb4a7..6fe9c2a 100644
--- a/metadata.c
+++ b/metadata.c
@@ -381,7 +381,7 @@ GetAudioMetadata(const char * path, char * name)
if( song.title && *song.title )
{
m.title = trim(song.title);
- if( (esc_tag = escape_tag(m.title)) )
+ if( (esc_tag = escape_tag(m.title, 0)) )
{
free_flags |= FLAG_TITLE;
m.title = esc_tag;
@@ -401,7 +401,7 @@ GetAudioMetadata(const char * path, char * name)
m.creator = strdup("Various Artists");
free_flags |= FLAG_CREATOR;
}
- else if( (esc_tag = escape_tag(m.creator)) )
+ else if( (esc_tag = escape_tag(m.creator, 0)) )
{
m.creator = esc_tag;
free_flags |= FLAG_CREATOR;
@@ -422,7 +422,7 @@ GetAudioMetadata(const char * path, char * name)
m.artist = strdup("Various Artists");
free_flags |= FLAG_ARTIST;
}
- else if( (esc_tag = escape_tag(m.artist)) )
+ else if( (esc_tag = escape_tag(m.artist, 0)) )
{
m.artist = esc_tag;
free_flags |= FLAG_ARTIST;
@@ -432,7 +432,7 @@ GetAudioMetadata(const char * path, char * name)
if( song.album && *song.album )
{
m.album = trim(song.album);
- if( (esc_tag = escape_tag(m.album)) )
+ if( (esc_tag = escape_tag(m.album, 0)) )
{
free_flags |= FLAG_ALBUM;
m.album = esc_tag;
@@ -441,7 +441,7 @@ GetAudioMetadata(const char * path, char * name)
if( song.genre && *song.genre )
{
m.genre = trim(song.genre);
- if( (esc_tag = escape_tag(m.genre)) )
+ if( (esc_tag = escape_tag(m.genre, 0)) )
{
free_flags |= FLAG_GENRE;
m.genre = esc_tag;
@@ -450,7 +450,7 @@ GetAudioMetadata(const char * path, char * name)
if( song.comment && *song.comment )
{
m.comment = trim(song.comment);
- if( (esc_tag = escape_tag(m.comment)) )
+ if( (esc_tag = escape_tag(m.comment, 0)) )
{
free_flags |= FLAG_COMMENT;
m.comment = esc_tag;
@@ -1398,19 +1398,19 @@ GetVideoMetadata(const char * path, char * name)
{
if( video.title && *video.title )
{
- m.title = strdup(trim(video.title));
+ m.title = escape_tag(trim(video.title), 1);
}
if( video.genre && *video.genre )
{
- m.genre = strdup(trim(video.genre));
+ m.genre = escape_tag(trim(video.genre), 1);
}
if( video.contributor[ROLE_TRACKARTIST] && *video.contributor[ROLE_TRACKARTIST] )
{
- m.artist = strdup(trim(video.contributor[ROLE_TRACKARTIST]));
+ m.artist = escape_tag(trim(video.contributor[ROLE_TRACKARTIST]), 1);
}
if( video.contributor[ROLE_ALBUMARTIST] && *video.contributor[ROLE_ALBUMARTIST] )
{
- m.creator = strdup(trim(video.contributor[ROLE_ALBUMARTIST]));
+ m.creator = escape_tag(trim(video.contributor[ROLE_ALBUMARTIST]), 1);
}
else
{
@@ -1419,6 +1419,7 @@ GetVideoMetadata(const char * path, char * name)
}
}
}
+ #ifndef NETGEAR
#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0)
else if( strcmp(ctx->iformat->name, "mov,mp4,m4a,3gp,3g2,mj2") == 0 )
{
@@ -1431,17 +1432,18 @@ GetVideoMetadata(const char * path, char * name)
{
//DEBUG DPRINTF(E_DEBUG, L_METADATA, " %-16s: %s\n", tag->key, tag->value);
if( strcmp(tag->key, "title") == 0 )
- m.title = strdup(trim(tag->value));
+ m.title = escape_tag(trim(tag->value), 1);
else if( strcmp(tag->key, "genre") == 0 )
- m.genre = strdup(trim(tag->value));
+ m.genre = escape_tag(trim(tag->value), 1);
else if( strcmp(tag->key, "artist") == 0 )
- m.artist = strdup(trim(tag->value));
+ m.artist = escape_tag(trim(tag->value), 1);
else if( strcmp(tag->key, "comment") == 0 )
- m.comment = strdup(trim(tag->value));
+ m.comment = escape_tag(trim(tag->value), 1);
}
}
}
#endif
+ #endif
video_no_dlna:
av_close_input_file(ctx);
diff --git a/scanner.c b/scanner.c
index ba58510..a2880d0 100644
--- a/scanner.c
+++ b/scanner.c
@@ -760,7 +760,7 @@ ScanDirectory(const char * dir, const char * parent, enum media_types dir_type)
#endif
type = TYPE_UNKNOWN;
sprintf(full_path, "%s/%s", dir, namelist[i]->d_name);
- name = escape_tag(namelist[i]->d_name);
+ name = escape_tag(namelist[i]->d_name, 1);
if( namelist[i]->d_type == DT_DIR )
{
type = TYPE_DIR;
@@ -775,17 +775,16 @@ ScanDirectory(const char * dir, const char * parent, enum media_types dir_type)
}
if( (type == TYPE_DIR) && (access(full_path, R_OK|X_OK) == 0) )
{
- insert_directory(name?name:namelist[i]->d_name, full_path, BROWSEDIR_ID, (parent ? parent:""), i+startID);
+ insert_directory(name, full_path, BROWSEDIR_ID, (parent ? parent:""), i+startID);
sprintf(parent_id, "%s$%X", (parent ? parent:""), i+startID);
ScanDirectory(full_path, parent_id, dir_type);
}
else if( type == TYPE_FILE )
{
- if( insert_file(name?name:namelist[i]->d_name, full_path, (parent ? parent:""), i+startID) == 0 )
+ if( insert_file(name, full_path, (parent ? parent:""), i+startID) == 0 )
fileno++;
}
- if( name )
- free(name);
+ free(name);
free(namelist[i]);
}
free(namelist);
diff --git a/tivo_commands.c b/tivo_commands.c
index 73ea96d..16074bc 100644
--- a/tivo_commands.c
+++ b/tivo_commands.c
@@ -256,16 +256,14 @@ int callback(void *args, int argc, char **argv, char **azColName)
passed_args->size += ret;
if( flags & FLAG_VIDEO )
{
- char *name = basename(path);
- char *esc_name = escape_tag(name);
+ char *esc_name = escape_tag(basename(path), 1);
ret = sprintf(str_buf, ""
"video/*"
"urn:tivo:image:save-until-i-delete-recording"
""
"Videos"
- "%s ", esc_name?esc_name:name);
- if( esc_name )
- free(esc_name);
+ "%s ", esc_name);
+ free(esc_name);
}
else
{
@@ -415,9 +413,7 @@ SendContainer(struct upnphttp * h, const char * objectID, int itemStart, int ite
sql = sqlite3_mprintf("SELECT NAME from OBJECTS where OBJECT_ID = '%s'", objectID);
if( (sql_get_table(db, sql, &result, &ret, NULL) == SQLITE_OK) && ret )
{
- title = escape_tag(result[1]);
- if( !title )
- title = strdup(result[1]);
+ title = escape_tag(result[1], 1);
}
else
title = strdup("UNKNOWN");
diff --git a/utils.c b/utils.c
index 9192d20..acd3796 100644
--- a/utils.c
+++ b/utils.c
@@ -136,7 +136,7 @@ modifyString(char * string, const char * before, const char * after, short like)
}
char *
-escape_tag(const char *tag)
+escape_tag(const char *tag, uint8_t force_alloc)
{
char *esc_tag = NULL;
@@ -147,6 +147,8 @@ escape_tag(const char *tag)
esc_tag = modifyString(esc_tag, "<", "<", 0);
esc_tag = modifyString(esc_tag, ">", ">", 0);
}
+ else if( force_alloc )
+ esc_tag = strdup(tag);
return esc_tag;
}
diff --git a/utils.h b/utils.h
index 5d8c4b8..8bb79e7 100644
--- a/utils.h
+++ b/utils.h
@@ -37,7 +37,7 @@ char *
modifyString(char * string, const char * before, const char * after, short like);
char *
-escape_tag(const char *tag);
+escape_tag(const char *tag, uint8_t force_alloc);
void
strip_ext(char * name);