diff options
author | Gleb Smirnoff <glebius@FreeBSD.org> | 2019-01-08 04:14:51 +0000 |
---|---|---|
committer | Gleb Smirnoff <glebius@FreeBSD.org> | 2019-01-08 04:14:51 +0000 |
commit | 2db2d21af7438d535016d85ea1b51515123720fc (patch) | |
tree | 14504cbad95c3cd373efa9024e8da0a84da02858 /net | |
parent | 54eb7db6b55d5c6e406cc32a7bd9a0c3fe4f57d0 (diff) | |
download | ports-2db2d21af7438d535016d85ea1b51515123720fc.tar.gz ports-2db2d21af7438d535016d85ea1b51515123720fc.zip |
Notes
Diffstat (limited to 'net')
-rw-r--r-- | net/minidlna/Makefile | 14 | ||||
-rw-r--r-- | net/minidlna/distinfo | 6 | ||||
-rw-r--r-- | net/minidlna/files/extra-patch-kqueue | 564 | ||||
-rw-r--r-- | net/minidlna/files/patch-getifaddr.c | 11 | ||||
-rw-r--r-- | net/minidlna/pkg-descr | 3 |
5 files changed, 13 insertions, 585 deletions
diff --git a/net/minidlna/Makefile b/net/minidlna/Makefile index 7728eba424c9..90a4e1c7ba35 100644 --- a/net/minidlna/Makefile +++ b/net/minidlna/Makefile @@ -3,10 +3,10 @@ PORTNAME= minidlna PORTVERSION= 1.2.1 -PORTREVISION= 3 +PORTREVISION= 4 PORTEPOCH= 1 CATEGORIES= net multimedia www -MASTER_SITES= SF +MASTER_SITES= GH MAINTAINER= glebius@FreeBSD.org COMMENT= Media-server compatible with "Digital Life Network Alliance" @@ -26,6 +26,10 @@ CONFIGURE_ARGS= --with-db-path=/var/db/minidlna \ --with-os-url="http://www.FreeBSD.org" USES= autoreconf gettext-tools iconv jpeg localbase +USE_GITHUB= yes +GH_ACCOUNT= glebius +GH_TAGNAME= 4357325 + PKGMESSAGE= ${WRKSRC}/pkg-message SUB_FILES+= pkg-message USE_RC_SUBR= minidlna @@ -34,16 +38,12 @@ SUB_LIST+= USER=${USERS} USERS= dlna GROUPS= dlna -OPTIONS_DEFINE= DEBUG KQUEUE NLS -OPTIONS_DEFAULT=KQUEUE +OPTIONS_DEFINE= DEBUG NLS OPTIONS_SUB= yes DEBUG_CFLAGS= -DDEBUG -KQUEUE_DESC= Experimental patch for automatic rescan using kqueue(2) NLS_USES= gettext-runtime -KQUEUE_EXTRA_PATCHES+= ${PATCHDIR}/extra-patch-kqueue - post-install: ${INSTALL_MAN} ${WRKSRC}/*.5 ${STAGEDIR}${MANPREFIX}/man/man5/ ${INSTALL_MAN} ${WRKSRC}/*.8 ${STAGEDIR}${MANPREFIX}/man/man8/ diff --git a/net/minidlna/distinfo b/net/minidlna/distinfo index aefa6ed28072..80cd548c9bcb 100644 --- a/net/minidlna/distinfo +++ b/net/minidlna/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1513243527 -SHA256 (minidlna-1.2.1.tar.gz) = 67388ba23ab0c7033557a32084804f796aa2a796db7bb2b770fb76ac2a742eec -SIZE (minidlna-1.2.1.tar.gz) = 459549 +TIMESTAMP = 1546919885 +SHA256 (glebius-minidlna-1.2.1-4357325_GH0.tar.gz) = 5e2984f2690c74e673271da01b2ae62ebc9d6d9e4453dc7d28696023807f0825 +SIZE (glebius-minidlna-1.2.1-4357325_GH0.tar.gz) = 296354 diff --git a/net/minidlna/files/extra-patch-kqueue b/net/minidlna/files/extra-patch-kqueue deleted file mode 100644 index 33233908fec3..000000000000 --- a/net/minidlna/files/extra-patch-kqueue +++ /dev/null @@ -1,564 +0,0 @@ -diff --git configure.ac configure.ac -index f343d21..374c3c3 100644 ---- configure.ac -+++ configure.ac -@@ -488,7 +488,7 @@ AC_CHECK_LIB(avahi-client, avahi_threaded_poll_new, - ################################################################################################################ - ### Header checks - --AC_CHECK_HEADERS([arpa/inet.h asm/unistd.h endian.h machine/endian.h fcntl.h libintl.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/file.h sys/inotify.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h]) -+AC_CHECK_HEADERS([arpa/inet.h asm/unistd.h endian.h machine/endian.h fcntl.h libintl.h locale.h netdb.h netinet/in.h stddef.h stdlib.h string.h sys/file.h sys/inotify.h sys/ioctl.h sys/param.h sys/socket.h sys/time.h unistd.h sys/event.h]) - - AC_CHECK_FUNCS(inotify_init, AC_DEFINE(HAVE_INOTIFY,1,[Whether kernel has inotify support]), [ - AC_MSG_CHECKING([for __NR_inotify_init syscall]) -diff --git minidlna.c minidlna.c -index 322d04d..ff1bd9d 100644 ---- minidlna.c -+++ minidlna.c -@@ -46,6 +46,7 @@ - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -+#define FD_SETSIZE 8192 - #include <stdlib.h> - #include <unistd.h> - #include <string.h> -@@ -357,6 +358,7 @@ rescan: - open_db(&db); - if (*scanner_pid == 0) /* child (scanner) process */ - { -+ DPRINTF(E_DEBUG, L_GENERAL, "Starting scanner in forked child\n"); - start_scanner(); - sqlite3_close(db); - log_close(); -@@ -366,6 +368,7 @@ rescan: - } - else if (*scanner_pid < 0) - { -+ DPRINTF(E_DEBUG, L_GENERAL, "Starting scanner in parent\n"); - start_scanner(); - } - #else -@@ -1057,6 +1060,15 @@ main(int argc, char **argv) - else if (pthread_create(&inotify_thread, NULL, start_inotify, NULL) != 0) - DPRINTF(E_FATAL, L_GENERAL, "ERROR: pthread_create() failed for start_inotify. EXITING\n"); - } -+#elif defined(HAVE_SYS_EVENT_H) -+ if( GETFLAG(INOTIFY_MASK) ) -+ { -+ if (!sqlite3_threadsafe() || sqlite3_libversion_number() < 3005001) -+ DPRINTF(E_ERROR, L_GENERAL, "SQLite library is not threadsafe! " -+ "Kqueue will be disabled.\n"); -+ else if (pthread_create(&inotify_thread, NULL, start_kqueue, NULL) != 0) -+ DPRINTF(E_FATAL, L_GENERAL, "ERROR: pthread_create() failed for start_kqueue. EXITING\n"); -+ } - #endif - smonitor = OpenAndConfMonitorSocket(); - -diff --git monitor.c monitor.c -index ebe8095..e3eaddc 100644 ---- monitor.c -+++ monitor.c -@@ -29,16 +29,21 @@ - #include <sys/types.h> - #include <sys/stat.h> - #include <sys/time.h> --#ifdef HAVE_INOTIFY -+#if defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H) - #include <sys/resource.h> - #include <poll.h> -+#ifdef HAVE_INOTIFY - #ifdef HAVE_SYS_INOTIFY_H - #include <sys/inotify.h> --#else -+#else /*HAVE_SYS_INOTIFY_H*/ - #include "linux/inotify.h" - #include "linux/inotify-syscalls.h" --#endif --#endif -+#endif /*HAVE_SYS_INOTIFY_H*/ -+#else /*HAVE_INOTIFY*/ -+#include <sys/event.h> -+#include <fcntl.h> -+#endif /*HAVE_INOTIFY*/ -+#endif /*defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H)*/ - #include "libav.h" - - #include "upnpglobalvars.h" -@@ -53,12 +58,14 @@ - - static time_t next_pl_fill = 0; - -+#if defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H) - #ifdef HAVE_INOTIFY - #define EVENT_SIZE ( sizeof (struct inotify_event) ) - #define BUF_LEN ( 1024 * ( EVENT_SIZE + 16 ) ) - #define DESIRED_WATCH_LIMIT 65536 - - #define PATH_BUF_SIZE PATH_MAX -+#endif /*HAVE_INOTIFY*/ - - struct watch - { -@@ -85,6 +92,7 @@ get_path_from_wd(int wd) - return NULL; - } - -+#ifdef HAVE_INOTIFY - static unsigned int - next_highest(unsigned int num) - { -@@ -107,6 +115,7 @@ raise_watch_limit(unsigned int limit) - fprintf(max_watches, "%u", next_highest(limit)); - fclose(max_watches); - } -+#endif /*HAVE_INOTIFY*/ - - static int - add_watch(int fd, const char * path) -@@ -114,6 +123,7 @@ add_watch(int fd, const char * path) - struct watch *nw; - int wd; - -+#ifdef HAVE_INOTIFY - wd = inotify_add_watch(fd, path, IN_CREATE|IN_CLOSE_WRITE|IN_DELETE|IN_MOVE); - if( wd < 0 && errno == ENOSPC) - { -@@ -125,6 +135,27 @@ add_watch(int fd, const char * path) - DPRINTF(E_ERROR, L_INOTIFY, "inotify_add_watch(%s) [%s]\n", path, strerror(errno)); - return -1; - } -+#else /*HAVE_INOTIFY*/ -+ wd = open(path, O_RDONLY); -+ if (wd < 0) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "inotify_add_watch[kqueue,open](%s) [%s]\n", path, strerror(errno)); -+ return -1; -+ } -+ -+ struct kevent ke; -+ EV_SET(&ke, wd, -+ EVFILT_VNODE, -+ EV_ADD | EV_ENABLE | EV_CLEAR, -+ NOTE_DELETE | NOTE_WRITE | NOTE_EXTEND /*| NOTE_ATTRB*/, -+ 0, NULL); -+ -+ if( kevent(fd, &ke, 1, NULL, 0, NULL) < 0 ) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "inotify_add_watch[kqueue](%s) [%s]\n", path, strerror(errno)); -+ return -1; -+ } -+#endif /*HAVE_INOTIFY*/ - - nw = malloc(sizeof(struct watch)); - if( nw == NULL ) -@@ -158,7 +189,12 @@ remove_watch(int fd, const char * path) - for( w = watches; w; w = w->next ) - { - if( strcmp(path, w->path) == 0 ) -+#ifdef HAVE_INOTIFY - return(inotify_rm_watch(fd, w->wd)); -+#else /*HAVE_INOTIFY*/ -+ close(w->wd); /* kqueue cleans up events when handle dies*/ -+ return(0); -+#endif /*HAVE_INOTIFY*/ - } - - return 1; -@@ -167,8 +203,7 @@ remove_watch(int fd, const char * path) - static int - inotify_create_watches(int fd) - { -- FILE * max_watches; -- unsigned int num_watches = 0, watch_limit; -+ unsigned int num_watches = 0; - char **result; - int i, rows = 0; - struct media_dir_s * media_path; -@@ -188,6 +223,10 @@ inotify_create_watches(int fd) - } - sqlite3_free_table(result); - -+#ifdef HAVE_INOTIFY -+ FILE * max_watches; -+ unsigned int watch_limit; -+ - max_watches = fopen("/proc/sys/fs/inotify/max_user_watches", "r"); - if( max_watches ) - { -@@ -224,6 +263,7 @@ inotify_create_watches(int fd) - DPRINTF(E_WARN, L_INOTIFY, "WARNING: Could not read inotify max_user_watches! " - "Hopefully it is enough to cover %u current directories plus any new ones added.\n", num_watches); - } -+#endif /*HAVE_INOTIFY*/ - - return rows; - } -@@ -238,7 +278,11 @@ inotify_remove_watches(int fd) - while( w ) - { - last_w = w; -+#ifdef HAVE_INOTIFY - inotify_rm_watch(fd, w->wd); -+#else /*HAVE_INOTIFY*/ -+ close(w->wd); /*kqueue cleans up after fhandle dies*/ -+#endif /*HAVE_INOTIFY*/ - free(w->path); - rm_watches++; - w = w->next; -@@ -247,7 +291,7 @@ inotify_remove_watches(int fd) - - return rm_watches; - } --#endif -+#endif /*defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H)*/ - - int - monitor_remove_file(const char * path) -@@ -304,6 +348,8 @@ monitor_remove_file(const char * path) - continue; - if( children < 2 ) - { -+ sql_exec(db, "DELETE from DETAILS where ID =" -+ " (SELECT DETAIL_ID from OBJECTS where OBJECT_ID = '%s')", result[i]); - sql_exec(db, "DELETE from OBJECTS where OBJECT_ID = '%s'", result[i]); - - ptr = strrchr(result[i], '$'); -@@ -311,6 +357,8 @@ monitor_remove_file(const char * path) - *ptr = '\0'; - if( sql_get_int_field(db, "SELECT count(*) from OBJECTS where PARENT_ID = '%s'", result[i]) == 0 ) - { -+ sql_exec(db, "DELETE from DETAILS where ID =" -+ " (SELECT DETAIL_ID from OBJECTS where OBJECT_ID = '%s')", result[i]); - sql_exec(db, "DELETE from OBJECTS where OBJECT_ID = '%s'", result[i]); - } - } -@@ -342,6 +390,7 @@ monitor_insert_file(char * name, const char * path) - media_types types = ALL_MEDIA; - struct media_dir_s * media_path = media_dirs; - struct stat st; -+ struct timeval now; - - /* Is it cover art for another file? */ - if( is_image(path) ) -@@ -405,6 +454,16 @@ monitor_insert_file(char * name, const char * path) - /* If it's already in the database and hasn't been modified, skip it. */ - if( stat(path, &st) != 0 ) - return -1; -+ -+ (void)gettimeofday(&now, NULL); -+ while (now.tv_sec < st.st_mtime + 3) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Sleeping until %s is stable for a few seconds ...\n", path); -+ sleep(1); -+ (void)gettimeofday(&now, NULL); -+ if (stat(path, &st) != 0) -+ return -1; -+ } - - ts = sql_get_int_field(db, "SELECT TIMESTAMP from DETAILS where PATH = '%q'", path); - if( !ts && is_playlist(path) && (sql_get_int_field(db, "SELECT ID from PLAYLISTS where PATH = '%q'", path) > 0) ) -@@ -528,7 +587,7 @@ monitor_insert_directory(int fd, char *name, const char * path) - - if( fd > 0 ) - { -- #ifdef HAVE_INOTIFY -+ #if defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H) - int wd = add_watch(fd, path); - if( wd == -1 ) - { -@@ -538,7 +597,7 @@ monitor_insert_directory(int fd, char *name, const char * path) - { - DPRINTF(E_INFO, L_INOTIFY, "Added watch to %s [%d]\n", path, wd); - } -- #endif -+ #endif /*defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H)*/ - } - - media_path = media_dirs; -@@ -604,7 +663,7 @@ monitor_remove_directory(int fd, const char * path) - valid_cache = 0; - if( fd > 0 ) - { -- #ifdef HAVE_INOTIFY -+ #if defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H) - remove_watch(fd, path); - #endif - } -@@ -631,6 +690,7 @@ monitor_remove_directory(int fd, const char * path) - return ret; - } - -+#if defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H) - #ifdef HAVE_INOTIFY - void * - start_inotify(void) -@@ -754,4 +814,232 @@ quitting: - - return 0; - } --#endif -+#else /*HAVE_INOTIFY*/ -+void * -+start_kqueue() -+{ -+ int global_kqueue_handle = -1; -+ -+ global_kqueue_handle = kqueue(); -+ if ( global_kqueue_handle < 0 ) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "kqueue() failed: %s\n", strerror(errno)); -+ return 0; -+ } -+ -+ while( GETFLAG(SCANNING_MASK) ) -+ { -+ if( quitting ) -+ goto quitting; -+ -+ DPRINTF(E_DEBUG, L_INOTIFY, "..waiting for scanning to complete...\n"); -+ sleep(1); -+ } -+ -+ DPRINTF(E_DEBUG, L_INOTIFY, "GOING WILD!\n"); -+ -+ inotify_create_watches(global_kqueue_handle); -+ if (setpriority(PRIO_PROCESS, 0, 19) == -1) -+ DPRINTF(E_WARN, L_INOTIFY, "Failed to reduce kqueue thread priority\n"); -+ sqlite3_release_memory(1<<31); -+ av_register_all(); -+ -+ while( !quitting ) -+ { -+ struct kevent ke; -+ if ( kevent(global_kqueue_handle, NULL, 0, &ke, 1, NULL) == -1 ) -+ { -+ DPRINTF(E_WARN, L_INOTIFY, "kevent polling failure: %s\n", strerror(errno)); -+ continue; -+ } -+ -+ /*DPRINTF(E_DEBUG, L_INOTIFY, "GOT KEVENT:\n" -+ "ident=0x%X, filter=0x%X, flags=0x%X, fflags=0x%X, data=0x%X, udata=0x%X\n", -+ ke.ident, ke.filter, ke.flags, ke.fflags, ke.data, ke.udata);*/ -+ -+ char* dir_path = get_path_from_wd(ke.ident); -+ if (dir_path == NULL) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "Path with FD=0x%X can't be resolved.\n", ke.ident); -+ continue; -+ } -+ -+ if (ke.fflags & NOTE_DELETE) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Path [%s] deleted.\n", dir_path); -+ monitor_remove_directory(ke.ident, dir_path); -+ } -+ else if ((ke.fflags & (NOTE_WRITE | NOTE_LINK)) == (NOTE_WRITE | NOTE_LINK)) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Path [%s] content updated (directory).\n", dir_path); -+ -+ char * sql; -+ char **result; -+ int i, rows; -+ sql = sqlite3_mprintf("SELECT PATH from DETAILS where (PATH > '%q/' and PATH <= '%q/%c')" -+ " and SIZE = ''", dir_path, dir_path, 0xFF); -+ if( (sql_get_table(db, sql, &result, &rows, NULL) != SQLITE_OK) ) -+ { -+ DPRINTF(E_WARN, L_INOTIFY, "Read state [%s]: Query failed, not updating\n", dir_path); -+ sqlite3_free(sql); -+ continue; -+ } -+ -+ for( i=1; i <= rows; i++ ) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Indexed content: %s\n", result[i]); -+ if (access(result[i], R_OK) == -1) -+ { -+ /* actually, global_kqueue_handle is not used here */ -+ monitor_remove_directory(global_kqueue_handle, result[i]); -+ } -+ } -+ -+ DIR* d; -+ struct dirent * entry; -+ d = opendir(dir_path); -+ if (!d) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "Can't list [%s] (%s)\n", dir_path, strerror(errno)); -+ continue; -+ } -+ -+ for ( entry = readdir(d); entry != NULL; entry = readdir(d) ) -+ { -+ if ( (entry->d_type == DT_DIR) && -+ (strcmp(entry->d_name, "..") != 0) && -+ (strcmp(entry->d_name, ".") != 0) ) -+ { -+ char tmp_path[PATH_MAX]; -+ int result_path_len; -+ -+ result_path_len = snprintf(tmp_path, PATH_MAX, -+ "%s/%s", dir_path, entry->d_name); -+ if (result_path_len >= PATH_MAX) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "File path too long for %s!", entry->d_name); -+ continue; -+ } -+ -+ DPRINTF(E_DEBUG, L_INOTIFY, "Walking %s\n", tmp_path); -+ char found_flag = 0; -+ for( i=1; i <= rows; i++ ) -+ { -+ if (strcmp(result[i], tmp_path) == 0) -+ { -+ found_flag = 1; -+ break; -+ } -+ } -+ -+ if ( !found_flag ) -+ { -+ char * esc_name = NULL; -+ esc_name = modifyString(strdup(entry->d_name), "&", "&amp;", 0); -+ monitor_insert_directory(global_kqueue_handle, esc_name, tmp_path); -+ free(esc_name); -+ } -+ } -+ } -+ -+ closedir(d); -+ -+ sqlite3_free_table(result); -+ sqlite3_free(sql); -+ } -+ else if (ke.fflags & NOTE_WRITE) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Path [%s] content updated (file).\n", dir_path); -+ -+ char * sql; -+ char **result; -+ int i, rows; -+ sql = sqlite3_mprintf("SELECT PATH from DETAILS where (PATH > '%q/' and PATH <= '%q/%c')" -+ " and SIZE <> ''", dir_path, dir_path, 0xFF); -+ if( (sql_get_table(db, sql, &result, &rows, NULL) != SQLITE_OK) ) -+ { -+ DPRINTF(E_WARN, L_INOTIFY, "Read state [%s]: Query failed, not updating\n", dir_path); -+ sqlite3_free(sql); -+ continue; -+ } -+ -+ for( i=1; i <= rows; i++ ) -+ { -+ DPRINTF(E_DEBUG, L_INOTIFY, "Indexed content: %s\n", result[i]); -+ if (access(result[i], R_OK) == -1) /*oops, our file is gone*/ -+ { -+ monitor_remove_file(result[i]); -+ } -+ } -+ -+ DIR* d; -+ struct dirent * entry; -+ d = opendir(dir_path); -+ if (!d) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "Can't list [%s] (%s)\n", dir_path, strerror(errno)); -+ continue; -+ } -+ -+ for ( entry = readdir(d); entry != NULL; entry = readdir(d) ) -+ { -+ if ( (entry->d_type == DT_REG) || -+ (entry->d_type == DT_LNK) ) -+ { -+ char tmp_path[PATH_MAX]; -+ int result_path_len; -+ -+ result_path_len = snprintf(tmp_path, PATH_MAX, -+ "%s/%s", dir_path, entry->d_name); -+ if (result_path_len >= PATH_MAX) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "File path too long for %s!", entry->d_name); -+ continue; -+ } -+ -+ DPRINTF(E_DEBUG, L_INOTIFY, "Walking %s\n", tmp_path); -+ -+ char found_flag = 0; -+ for( i=1; i <= rows; i++ ) -+ { -+ if (strcmp(result[i], tmp_path) == 0) -+ { -+ found_flag = 1; -+ break; -+ } -+ } -+ -+ if ( !found_flag ) -+ { -+ char * esc_name = NULL; -+ struct stat st; -+ -+ if( stat(tmp_path, &st) != 0 ) -+ { -+ DPRINTF(E_ERROR, L_INOTIFY, "'%s' disappeared!", tmp_path); -+ continue; -+ } -+ -+ esc_name = modifyString(strdup(entry->d_name), "&", "&amp;", 0); -+ if ( S_ISDIR(st.st_mode) ) -+ monitor_insert_directory(global_kqueue_handle, esc_name, tmp_path); -+ else -+ monitor_insert_file(esc_name, tmp_path); -+ free(esc_name); -+ } -+ } -+ } -+ -+ closedir(d); -+ -+ sqlite3_free_table(result); -+ sqlite3_free(sql); -+ } -+ } -+ inotify_remove_watches(global_kqueue_handle); -+quitting: -+ -+ return 0; -+} -+#endif /*HAVE_INOTIFY*/ -+#endif /*defined(HAVE_INOTIFY) || defined(HAVE_SYS_EVENT_H)*/ -diff --git monitor.h monitor.h -index 92ae41a..d0dd7e4 100644 ---- monitor.h -+++ monitor.h -@@ -13,4 +13,7 @@ monitor_remove_directory(int fd, const char * path); - #ifdef HAVE_INOTIFY - void * - start_inotify(); -+#elif defined(HAVE_SYS_EVENT_H) -+void * -+start_kqueue(); - #endif -diff --git upnpevents.c upnpevents.c -index 06ec43a..9827e6e 100644 ---- upnpevents.c -+++ upnpevents.c -@@ -47,6 +47,7 @@ - */ - #include "config.h" - -+#define FD_SETSIZE 8192 - #include <stdio.h> - #include <string.h> - #include <errno.h> -@@ -417,6 +417,10 @@ void upnpevents_selectfds(fd_set *readset, fd_set *writeset, int * max_fd) - { - struct upnp_event_notify * obj; - for(obj = notifylist.lh_first; obj != NULL; obj = obj->entries.le_next) { -+ if (obj->s > FD_SETSIZE) -+ DPRINTF(E_FATAL, L_HTTP, -+ "upnpevents_selectfds: file descriptor %d too big for select, limit is %d\n", -+ obj->s, FD_SETSIZE); - DPRINTF(E_DEBUG, L_HTTP, "upnpevents_selectfds: %p %d %d\n", - obj, obj->state, obj->s); - if(obj->s >= 0) { diff --git a/net/minidlna/files/patch-getifaddr.c b/net/minidlna/files/patch-getifaddr.c deleted file mode 100644 index 45eda3b20f78..000000000000 --- a/net/minidlna/files/patch-getifaddr.c +++ /dev/null @@ -1,11 +0,0 @@ ---- getifaddr.c.orig 2013-11-01 23:06:41.000000000 -0200 -+++ getifaddr.c 2013-11-05 13:51:05.978629077 -0200 -@@ -82,7 +82,7 @@ - if (ifname && strcmp(p->ifa_name, ifname) != 0) - continue; - addr_in = (struct sockaddr_in *)p->ifa_addr; -- if (!ifname && (p->ifa_flags & (IFF_LOOPBACK | IFF_SLAVE))) -+ if (!ifname && (p->ifa_flags & IFF_LOOPBACK)) - continue; - memcpy(&lan_addr[n_lan_addr].addr, &addr_in->sin_addr, sizeof(lan_addr[n_lan_addr].addr)); - if (!inet_ntop(AF_INET, &addr_in->sin_addr, lan_addr[n_lan_addr].str, sizeof(lan_addr[0].str)) ) diff --git a/net/minidlna/pkg-descr b/net/minidlna/pkg-descr index a3238894e5fc..f5bb84c839d2 100644 --- a/net/minidlna/pkg-descr +++ b/net/minidlna/pkg-descr @@ -4,4 +4,7 @@ fully compliant with DLNA/UPnP-AV clients. The media files are listed in an SQLite database allowing prompt restarts. +This is Gleb Smirnoff's fork of original project by Justin Maggard, +created [temporarily] due to low activity of main project. + WWW: http://minidlna.sourceforge.net |