multimedia/minidlna: Update to latest commit

Update minidlna to latest commit
Cherry pick commits from https://github.com/xavery/minidlna

Signed-off-by: Daniel Engberg <daniel.engberg.lists@pyret.net>
This commit is contained in:
Daniel Engberg 2019-01-14 01:01:15 +01:00
parent 80cdd53134
commit 1334840179
5 changed files with 442 additions and 6 deletions

View File

@ -8,12 +8,13 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=minidlna
PKG_VERSION:=1.2.1
PKG_RELEASE:=4
PKG_RELEASE:=1
PKG_SOURCE_URL:=@SF/minidlna
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
PKG_HASH:=67388ba23ab0c7033557a32084804f796aa2a796db7bb2b770fb76ac2a742eec
PKG_SOURCE_URL=git://minidlna.git.sourceforge.net/gitroot/minidlna/minidlna
PKG_SOURCE_PROTO:=git
PKG_SOURCE_DATE:=2018-04-10
PKG_SOURCE_VERSION:=799e6cf505ec470b2bf0ae4118143380aa16b837
PKG_MIRROR_HASH:=67cc817e671de99e5a3f5ed237f89e22470f1de94819bcaba86c0ba821104af5
PKG_LICENSE:=GPL-2.0 BSD-3-Clause
PKG_LICENSE_FILES:=COPYING LICENCE.miniupnpd

View File

@ -11,7 +11,7 @@
check_PROGRAMS = testupnpdescgen
--- a/configure.ac
+++ b/configure.ac
@@ -644,6 +644,8 @@ case "$target_os" in
@@ -647,6 +647,8 @@ case "$target_os" in
esac

View File

@ -0,0 +1,125 @@
From d297624e533d6d4274c750e3769749c3d7f121c8 Mon Sep 17 00:00:00 2001
From: Daniel Kamil Kozar <dkk089@gmail.com>
Date: Sat, 15 Dec 2018 16:34:30 +0100
Subject: [PATCH] Mark all instances of magic_container_s as const
---
containers.c | 38 +++++++++++++++++++-------------------
containers.h | 6 +++---
scanner.c | 2 +-
upnpsoap.c | 6 +++---
4 files changed, 26 insertions(+), 26 deletions(-)
--- a/containers.c
+++ b/containers.c
@@ -25,23 +25,23 @@
#define NINETY_DAYS "7776000"
-const char *music_id = MUSIC_ID;
-const char *music_all_id = MUSIC_ALL_ID;
-const char *music_genre_id = MUSIC_GENRE_ID;
-const char *music_artist_id = MUSIC_ARTIST_ID;
-const char *music_album_id = MUSIC_ALBUM_ID;
-const char *music_plist_id = MUSIC_PLIST_ID;
-const char *music_dir_id = MUSIC_DIR_ID;
-const char *video_id = VIDEO_ID;
-const char *video_all_id = VIDEO_ALL_ID;
-const char *video_dir_id = VIDEO_DIR_ID;
-const char *image_id = IMAGE_ID;
-const char *image_all_id = IMAGE_ALL_ID;
-const char *image_date_id = IMAGE_DATE_ID;
-const char *image_camera_id = IMAGE_CAMERA_ID;
-const char *image_dir_id = IMAGE_DIR_ID;
+static const char *music_id = MUSIC_ID;
+static const char *music_all_id = MUSIC_ALL_ID;
+static const char *music_genre_id = MUSIC_GENRE_ID;
+static const char *music_artist_id = MUSIC_ARTIST_ID;
+static const char *music_album_id = MUSIC_ALBUM_ID;
+static const char *music_plist_id = MUSIC_PLIST_ID;
+static const char *music_dir_id = MUSIC_DIR_ID;
+static const char *video_id = VIDEO_ID;
+static const char *video_all_id = VIDEO_ALL_ID;
+static const char *video_dir_id = VIDEO_DIR_ID;
+static const char *image_id = IMAGE_ID;
+static const char *image_all_id = IMAGE_ALL_ID;
+static const char *image_date_id = IMAGE_DATE_ID;
+static const char *image_camera_id = IMAGE_CAMERA_ID;
+static const char *image_dir_id = IMAGE_DIR_ID;
-struct magic_container_s magic_containers[] =
+const struct magic_container_s magic_containers[] =
{
/* Alternate root container */
{ NULL,
@@ -124,7 +124,7 @@ struct magic_container_s magic_container
{ NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, 0, 0 }
};
-struct magic_container_s *
+const struct magic_container_s *
in_magic_container(const char *id, int flags, const char **real_id)
{
size_t len;
@@ -154,7 +154,7 @@ in_magic_container(const char *id, int f
return NULL;
}
-struct magic_container_s *
+const struct magic_container_s *
check_magic_container(const char *id, int flags)
{
int i;
--- a/containers.h
+++ b/containers.h
@@ -30,7 +30,7 @@ struct magic_container_s {
int required_flags;
};
-extern struct magic_container_s magic_containers[];
+extern const struct magic_container_s magic_containers[];
-struct magic_container_s *in_magic_container(const char *id, int flags, const char **real_id);
-struct magic_container_s *check_magic_container(const char *id, int flags);
+const struct magic_container_s *in_magic_container(const char *id, int flags, const char **real_id);
+const struct magic_container_s *check_magic_container(const char *id, int flags);
--- a/scanner.c
+++ b/scanner.c
@@ -587,7 +587,7 @@ CreateDatabase(void)
}
for( i=0; magic_containers[i].objectid_match; i++ )
{
- struct magic_container_s *magic = &magic_containers[i];
+ const struct magic_container_s *magic = &magic_containers[i];
if (!magic->name)
continue;
if( sql_get_int_field(db, "SELECT 1 from OBJECTS where OBJECT_ID = '%s'", magic->objectid_match) == 0 )
--- a/upnpsoap.c
+++ b/upnpsoap.c
@@ -800,7 +800,7 @@ add_res(char *size, char *duration, char
}
static int
-get_child_count(const char *object, struct magic_container_s *magic)
+get_child_count(const char *object, const struct magic_container_s *magic)
{
int ret;
@@ -1292,7 +1292,7 @@ BrowseContentDirectory(struct upnphttp *
"<Result>"
"&lt;DIDL-Lite"
CONTENT_DIRECTORY_SCHEMAS;
- struct magic_container_s *magic;
+ const struct magic_container_s *magic;
char *zErrMsg = NULL;
char *sql, *ptr;
struct Response args;
@@ -1807,7 +1807,7 @@ SearchContentDirectory(struct upnphttp *
"<Result>"
"&lt;DIDL-Lite"
CONTENT_DIRECTORY_SCHEMAS;
- struct magic_container_s *magic;
+ const struct magic_container_s *magic;
char *zErrMsg = NULL;
char *sql, *ptr;
struct Response args;

View File

@ -0,0 +1,118 @@
From e0065b8343bc963a89556449e00f1d20086cc1f1 Mon Sep 17 00:00:00 2001
From: Daniel Kamil Kozar <dkk089@gmail.com>
Date: Sat, 15 Dec 2018 16:26:37 +0100
Subject: [PATCH] Wrap container definitions into a structure
---
containers.c | 25 +++++++++++++++++++++++++
containers.h | 8 ++++++++
scanner.c | 33 ++++++---------------------------
3 files changed, 39 insertions(+), 27 deletions(-)
--- a/containers.c
+++ b/containers.c
@@ -23,6 +23,31 @@
#include "containers.h"
#include "log.h"
+const struct container_s containers[] = {
+ { "0","-1", "root" },
+ { MUSIC_ID, "0", "Music" },
+ { MUSIC_ALL_ID, MUSIC_ID, "All Music" },
+ { MUSIC_GENRE_ID, MUSIC_ID, "Genre" },
+ { MUSIC_ARTIST_ID, MUSIC_ID, "Artist" },
+ { MUSIC_ALBUM_ID, MUSIC_ID, "Album" },
+ { MUSIC_DIR_ID, MUSIC_ID, "Folders" },
+ { MUSIC_PLIST_ID, MUSIC_ID, "Playlists" },
+
+ { VIDEO_ID, "0", "Video" },
+ { VIDEO_ALL_ID, VIDEO_ID, "All Video" },
+ { VIDEO_DIR_ID, VIDEO_ID, "Folders" },
+
+ { IMAGE_ID, "0", "Pictures" },
+ { IMAGE_ALL_ID, IMAGE_ID, "All Pictures" },
+ { IMAGE_DATE_ID, IMAGE_ID, "Date Taken" },
+ { IMAGE_CAMERA_ID, IMAGE_ID, "Camera" },
+ { IMAGE_DIR_ID, IMAGE_ID, "Folders" },
+
+ { BROWSEDIR_ID, "0", "Browse Folders" },
+
+ { 0, 0, 0 }
+};
+
#define NINETY_DAYS "7776000"
static const char *music_id = MUSIC_ID;
--- a/containers.h
+++ b/containers.h
@@ -16,6 +16,14 @@
* along with MiniDLNA. If not, see <http://www.gnu.org/licenses/>.
*/
+struct container_s {
+ const char *object_id;
+ const char *parent_id;
+ const char *name;
+};
+
+extern const struct container_s containers[];
+
struct magic_container_s {
const char *name;
const char *objectid_match;
--- a/scanner.c
+++ b/scanner.c
@@ -529,30 +529,7 @@ insert_file(const char *name, const char
int
CreateDatabase(void)
{
- int ret, i;
- const char *containers[] = { "0","-1", "root",
- MUSIC_ID, "0", _("Music"),
- MUSIC_ALL_ID, MUSIC_ID, _("All Music"),
- MUSIC_GENRE_ID, MUSIC_ID, _("Genre"),
- MUSIC_ARTIST_ID, MUSIC_ID, _("Artist"),
- MUSIC_ALBUM_ID, MUSIC_ID, _("Album"),
- MUSIC_DIR_ID, MUSIC_ID, _("Folders"),
- MUSIC_PLIST_ID, MUSIC_ID, _("Playlists"),
-
- VIDEO_ID, "0", _("Video"),
- VIDEO_ALL_ID, VIDEO_ID, _("All Video"),
- VIDEO_DIR_ID, VIDEO_ID, _("Folders"),
-
- IMAGE_ID, "0", _("Pictures"),
- IMAGE_ALL_ID, IMAGE_ID, _("All Pictures"),
- IMAGE_DATE_ID, IMAGE_ID, _("Date Taken"),
- IMAGE_CAMERA_ID, IMAGE_ID, _("Camera"),
- IMAGE_DIR_ID, IMAGE_ID, _("Folders"),
-
- BROWSEDIR_ID, "0", _("Browse Folders"),
- 0 };
-
- ret = sql_exec(db, create_objectTable_sqlite);
+ int ret = sql_exec(db, create_objectTable_sqlite);
if( ret != SQLITE_OK )
goto sql_failed;
ret = sql_exec(db, create_detailTable_sqlite);
@@ -576,16 +553,18 @@ CreateDatabase(void)
ret = sql_exec(db, "INSERT into SETTINGS values ('UPDATE_ID', '0')");
if( ret != SQLITE_OK )
goto sql_failed;
- for( i=0; containers[i]; i=i+3 )
+ for( int i=0; containers[i].name; ++i )
{
+ const struct container_s *c = &containers[i];
+ const char *name = _(c->name);
ret = sql_exec(db, "INSERT into OBJECTS (OBJECT_ID, PARENT_ID, DETAIL_ID, CLASS, NAME)"
" values "
"('%s', '%s', %lld, 'container.storageFolder', '%q')",
- containers[i], containers[i+1], GetFolderMetadata(containers[i+2], NULL, NULL, NULL, 0), containers[i+2]);
+ c->object_id, c->parent_id, GetFolderMetadata(name, NULL, NULL, NULL, 0), name);
if( ret != SQLITE_OK )
goto sql_failed;
}
- for( i=0; magic_containers[i].objectid_match; i++ )
+ for( int i=0; magic_containers[i].objectid_match; i++ )
{
const struct magic_container_s *magic = &magic_containers[i];
if (!magic->name)

View File

@ -0,0 +1,192 @@
From be9de8b2e0864b46498496af9ffdc31c0e7b764a Mon Sep 17 00:00:00 2001
From: Daniel Kamil Kozar <dkk089@gmail.com>
Date: Sun, 16 Dec 2018 14:21:58 +0100
Subject: [PATCH] Reduce duplication in sql.c
---
sql.c | 166 ++++++++++++++++++++--------------------------------------
1 file changed, 58 insertions(+), 108 deletions(-)
--- a/sql.c
+++ b/sql.c
@@ -65,122 +65,72 @@ sql_get_table(sqlite3 *db, const char *s
return ret;
}
+#define sql_get_field(type, column_get_fn) \
+ va_list ap;\
+ int counter, result;\
+ char *sql;\
+ type ret;\
+ sqlite3_stmt *stmt;\
+ \
+ va_start(ap, fmt);\
+ sql = sqlite3_vmprintf(fmt, ap);\
+ va_end(ap);\
+\
+ /*DPRINTF(E_DEBUG, L_DB_SQL, "sql: %s\n", sql); */ \
+\
+ switch (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL))\
+ {\
+ case SQLITE_OK:\
+ break;\
+ default:\
+ DPRINTF(E_ERROR, L_DB_SQL, "prepare failed: %s\n%s\n", sqlite3_errmsg(db), sql);\
+ sqlite3_free(sql);\
+ return -1;\
+ }\
+\
+ for (counter = 0;\
+ ((result = sqlite3_step(stmt)) == SQLITE_BUSY || result == SQLITE_LOCKED) && counter < 2;\
+ counter++) {\
+ /* While SQLITE_BUSY has a built in timeout,\
+ * SQLITE_LOCKED does not, so sleep */\
+ if (result == SQLITE_LOCKED)\
+ sleep(1);\
+ }\
+\
+ switch (result)\
+ {\
+ case SQLITE_DONE:\
+ /* no rows returned */\
+ ret = 0;\
+ break;\
+ case SQLITE_ROW:\
+ if (sqlite3_column_type(stmt, 0) == SQLITE_NULL)\
+ {\
+ ret = 0;\
+ break;\
+ }\
+ ret = column_get_fn(stmt, 0);\
+ break;\
+ default:\
+ DPRINTF(E_WARN, L_DB_SQL, "%s: step failed: %s\n%s\n", __func__, sqlite3_errmsg(db), sql);\
+ ret = -1;\
+ break;\
+ }\
+ sqlite3_free(sql);\
+ sqlite3_finalize(stmt);\
+\
+ return ret;
+
int
sql_get_int_field(sqlite3 *db, const char *fmt, ...)
{
- va_list ap;
- int counter, result;
- char *sql;
- int ret;
- sqlite3_stmt *stmt;
-
- va_start(ap, fmt);
- sql = sqlite3_vmprintf(fmt, ap);
- va_end(ap);
-
- //DPRINTF(E_DEBUG, L_DB_SQL, "sql: %s\n", sql);
-
- switch (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL))
- {
- case SQLITE_OK:
- break;
- default:
- DPRINTF(E_ERROR, L_DB_SQL, "prepare failed: %s\n%s\n", sqlite3_errmsg(db), sql);
- sqlite3_free(sql);
- return -1;
- }
-
- for (counter = 0;
- ((result = sqlite3_step(stmt)) == SQLITE_BUSY || result == SQLITE_LOCKED) && counter < 2;
- counter++) {
- /* While SQLITE_BUSY has a built in timeout,
- * SQLITE_LOCKED does not, so sleep */
- if (result == SQLITE_LOCKED)
- sleep(1);
- }
-
- switch (result)
- {
- case SQLITE_DONE:
- /* no rows returned */
- ret = 0;
- break;
- case SQLITE_ROW:
- if (sqlite3_column_type(stmt, 0) == SQLITE_NULL)
- {
- ret = 0;
- break;
- }
- ret = sqlite3_column_int(stmt, 0);
- break;
- default:
- DPRINTF(E_WARN, L_DB_SQL, "%s: step failed: %s\n%s\n", __func__, sqlite3_errmsg(db), sql);
- ret = -1;
- break;
- }
- sqlite3_free(sql);
- sqlite3_finalize(stmt);
-
- return ret;
+ sql_get_field(int, sqlite3_column_int)
}
int64_t
sql_get_int64_field(sqlite3 *db, const char *fmt, ...)
{
- va_list ap;
- int counter, result;
- char *sql;
- int64_t ret;
- sqlite3_stmt *stmt;
-
- va_start(ap, fmt);
- sql = sqlite3_vmprintf(fmt, ap);
- va_end(ap);
-
- //DPRINTF(E_DEBUG, L_DB_SQL, "sql: %s\n", sql);
-
- switch (sqlite3_prepare_v2(db, sql, -1, &stmt, NULL))
- {
- case SQLITE_OK:
- break;
- default:
- DPRINTF(E_ERROR, L_DB_SQL, "prepare failed: %s\n%s\n", sqlite3_errmsg(db), sql);
- sqlite3_free(sql);
- return -1;
- }
-
- for (counter = 0;
- ((result = sqlite3_step(stmt)) == SQLITE_BUSY || result == SQLITE_LOCKED) && counter < 2;
- counter++) {
- /* While SQLITE_BUSY has a built in timeout,
- * SQLITE_LOCKED does not, so sleep */
- if (result == SQLITE_LOCKED)
- sleep(1);
- }
-
- switch (result)
- {
- case SQLITE_DONE:
- /* no rows returned */
- ret = 0;
- break;
- case SQLITE_ROW:
- if (sqlite3_column_type(stmt, 0) == SQLITE_NULL)
- {
- ret = 0;
- break;
- }
- ret = sqlite3_column_int64(stmt, 0);
- break;
- default:
- DPRINTF(E_WARN, L_DB_SQL, "%s: step failed: %s\n%s\n", __func__, sqlite3_errmsg(db), sql);
- ret = -1;
- break;
- }
- sqlite3_free(sql);
- sqlite3_finalize(stmt);
-
- return ret;
+ sql_get_field(int64_t, sqlite3_column_int64)
}
char *