mirror of
https://git.FreeBSD.org/ports.git
synced 2025-01-27 10:03:20 +00:00
- Update to 1.1.0
Changes: http://sourceforge.net/projects/minidlna/files/minidlna/1.1.0/ Approved by: culot / jpaetzel (mentors, implicit)
This commit is contained in:
parent
86a309115d
commit
a0d792bcd2
Notes:
svn2git
2021-03-31 03:12:20 +00:00
svn path=/head/; revision=320407
@ -2,29 +2,27 @@
|
||||
# $FreeBSD$
|
||||
|
||||
PORTNAME= minidlna
|
||||
PORTVERSION= 1.0.25
|
||||
PORTREVISION= 2
|
||||
PORTVERSION= 1.1.0
|
||||
PORTEPOCH= 1
|
||||
CATEGORIES= net multimedia www
|
||||
MASTER_SITES= SF
|
||||
DISTFILES= ${PORTNAME}_${PORTVERSION}_src.tar.gz
|
||||
|
||||
MAINTAINER= wg@FreeBSD.org
|
||||
COMMENT= Media-server compatible with "Digital Life Network Alliance"
|
||||
|
||||
LIB_DEPENDS= sqlite3:${PORTSDIR}/databases/sqlite3 \
|
||||
jpeg:${PORTSDIR}/graphics/jpeg \
|
||||
jpeg:${PORTSDIR}/graphics/jpeg \
|
||||
exif:${PORTSDIR}/graphics/libexif \
|
||||
id3tag:${PORTSDIR}/audio/libid3tag \
|
||||
ogg:${PORTSDIR}/audio/libogg \
|
||||
ogg:${PORTSDIR}/audio/libogg \
|
||||
vorbis:${PORTSDIR}/audio/libvorbis \
|
||||
FLAC:${PORTSDIR}/audio/flac \
|
||||
FLAC:${PORTSDIR}/audio/flac \
|
||||
avformat:${PORTSDIR}/multimedia/ffmpeg
|
||||
|
||||
GNU_CONFIGURE= yes
|
||||
MAKE_JOBS_SAFE= yes
|
||||
MAKEFILE= ${FILESDIR}/BSDmakefile
|
||||
MAKE_ENV+= FILESDIR="${FILESDIR}" INSTALL_DATA="${INSTALL_DATA}"
|
||||
EXTRACT_AFTER_ARGS=--exclude getifaddr.c
|
||||
CONFIGURE_ARGS+=--with-db-path=/var/db/minidlna \
|
||||
--with-os-url="http://www.FreeBSD.org"
|
||||
|
||||
PKGMESSAGE= ${WRKSRC}/pkg-message
|
||||
SUB_FILES+= pkg-message
|
||||
@ -34,23 +32,26 @@ SUB_LIST+= USER=${USERS}
|
||||
USERS= dlna
|
||||
GROUPS= dlna
|
||||
|
||||
MAN5= minidlna.conf.5
|
||||
MAN8= minidlnad.8
|
||||
|
||||
.include <bsd.port.options.mk>
|
||||
|
||||
do-configure:
|
||||
.if ${PORT_OPTIONS:MNLS}
|
||||
${CP} ${FILESDIR}/config.h.in ${WRKSRC}/config.h
|
||||
USES+= gettext
|
||||
PLIST_SUB+= NLS=""
|
||||
.else
|
||||
${SED} 's,^#define HAVE_ICONV_H,/* & */,' ${FILESDIR}/config.h.in > \
|
||||
${WRKSRC}/config.h
|
||||
CONFIGURE_ARGS+= --disable-nls
|
||||
PLIST_SUB+= NLS="@comment "
|
||||
.endif
|
||||
|
||||
post-install:
|
||||
${FMT} ${PKGMESSAGE}
|
||||
${INSTALL_MAN} ${MAN5:S,^,${WRKSRC}/,} ${MANPREFIX}/man/man5/
|
||||
${INSTALL_MAN} ${MAN8:S,^,${WRKSRC}/,} ${MANPREFIX}/man/man8/
|
||||
${INSTALL_DATA} ${WRKSRC}/minidlna.conf ${PREFIX}/etc/minidlna.conf.sample
|
||||
@${MKDIR} /var/run/minidlna
|
||||
@${MKDIR} /var/db/minidlna
|
||||
@${CHOWN} ${USERS} /var/db/minidlna
|
||||
@${FMT} ${PKGMESSAGE}
|
||||
|
||||
.include <bsd.port.pre.mk>
|
||||
|
||||
.if ${OSVERSION} < 800500
|
||||
EXTRA_PATCHES= ${FILESDIR}/scandir-patch
|
||||
.endif
|
||||
|
||||
.include <bsd.port.post.mk>
|
||||
.include <bsd.port.mk>
|
||||
|
@ -1,2 +1,2 @@
|
||||
SHA256 (minidlna_1.0.25_src.tar.gz) = 170560fbe042c2bbcba78c5f15b54f4fac321ff770490b23b55789be463f2851
|
||||
SIZE (minidlna_1.0.25_src.tar.gz) = 211756
|
||||
SHA256 (minidlna-1.1.0.tar.gz) = c2ef2ebe4311d08a60a87ec0c86fbe5e7f4fd25b947841f1d71b0508c60a90e2
|
||||
SIZE (minidlna-1.1.0.tar.gz) = 423555
|
||||
|
@ -1,37 +0,0 @@
|
||||
PROG= minidlna
|
||||
NO_MAN= Ha-ha...
|
||||
|
||||
OS!= uname
|
||||
VERS!= uname -r
|
||||
|
||||
CFLAGS= -I${.CURDIR} -I${LOCALBASE}/include -I${LOCALBASE}/include/ffmpeg
|
||||
CFLAGS+=-I${LOCALBASE}/include/libavutil
|
||||
CFLAGS+=-DPREFIX='"${PREFIX}"' -DOS='"${OS}"' -DOSVERSION='"${VERS}"'
|
||||
CFLAGS+=-Wformat -Wunused -Wall
|
||||
CFLAGS+=-Wno-deprecated-declarations
|
||||
|
||||
LDADD+= -L${LOCALBASE}/lib
|
||||
LDADD+= -lsqlite3 -ljpeg -lexif -lid3tag -logg -lvorbis -lFLAC -lavformat
|
||||
|
||||
SRCS= albumart.c daemonize.c getifaddr.c image_utils.c log.c \
|
||||
metadata.c minidlna.c minissdp.c minixml.c options.c playlist.c \
|
||||
scanner.c sql.c upnpdescgen.c upnpevents.c upnpglobalvars.c \
|
||||
upnphttp.c upnpreplyparse.c upnpsoap.c utils.c uuid.c
|
||||
|
||||
# TiVo-related sources still need massaging to compile on BSD:
|
||||
# SRCS+= tivo_beacon.c tivo_commands.c tivo_utils.c
|
||||
|
||||
.PATH: ${FILESDIR} ${.CURDIR}/tagutils
|
||||
|
||||
SRCS+= misc.c tagutils.c textutils.c
|
||||
|
||||
WARNS= 3
|
||||
|
||||
BINDIR= ${PREFIX}/sbin
|
||||
|
||||
beforeinstall:
|
||||
${INSTALL_DATA} ${.CURDIR}/minidlna.conf ${PREFIX}/etc/minidlna.conf.sample
|
||||
test -e ${PREFIX}/etc/minidlna.conf || \
|
||||
${INSTALL_DATA} ${.CURDIR}/minidlna.conf ${PREFIX}/etc/minidlna.conf
|
||||
|
||||
.include <bsd.prog.mk>
|
@ -1,34 +0,0 @@
|
||||
/* MiniDLNA Project
|
||||
* http://sourceforge.net/projects/minidlna/
|
||||
* (c) 2008-2009 Justin Maggard
|
||||
* generated by ./genconfig.sh on ÎÄ 13 ÞÅÒ 2010 00:06:49 EDT */
|
||||
#ifndef __CONFIG_H__
|
||||
#define __CONFIG_H__
|
||||
|
||||
#define PFRULE_INOUT_COUNTS
|
||||
#define OS_NAME OS
|
||||
#define OS_VERSION OS "/" OSVERSION
|
||||
#define OS_URL "http://www." OS ".org/"
|
||||
|
||||
/* full path of the file database */
|
||||
#define DEFAULT_DB_PATH "/var/db/minidlna"
|
||||
#define DEFAULT_LOG_PATH "/var/log"
|
||||
|
||||
/* Comment the following line to use home made daemonize() func instead
|
||||
* of BSD daemon() */
|
||||
#define USE_DAEMON
|
||||
|
||||
/* Enable if the system inotify.h exists. Otherwise our own inotify.h will be used. */
|
||||
/*#define HAVE_INOTIFY_H*/
|
||||
|
||||
/* Enable if the system iconv.h exists. ID3 tag reading in various character sets will not work properly otherwise. */
|
||||
#define HAVE_ICONV_H
|
||||
|
||||
/* Enable NETGEAR-specific tweaks. */
|
||||
/*#define NETGEAR*/
|
||||
/* Enable ReadyNAS-specific tweaks. */
|
||||
/*#define READYNAS*/
|
||||
/* Compile in TiVo support. */
|
||||
/* #define TIVO_SUPPORT -- not yet ported to FreeBSD */
|
||||
|
||||
#endif
|
@ -1,246 +0,0 @@
|
||||
/* $Id: getifaddr.c,v 1.12 2010/11/11 23:48:13 jmaggard Exp $ */
|
||||
/* MiniUPnP project
|
||||
* http://miniupnp.free.fr/ or http://miniupnp.tuxfamily.org/
|
||||
*
|
||||
* Copyright (c) 2006, Thomas Bernard
|
||||
* All rights reserved.
|
||||
*
|
||||
* Adapted to BSD by jayp and Mikhail T. -- 2010
|
||||
* William Grzybowski -- 2013
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
* * The name of the author may not be used to endorse or promote products
|
||||
* derived from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
|
||||
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
|
||||
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
|
||||
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
|
||||
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
|
||||
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||
* POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/ioctl.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <netinet/in.h>
|
||||
#include <netdb.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <arpa/inet.h>
|
||||
#include <net/route.h>
|
||||
#include <err.h>
|
||||
#include <netinet/if_ether.h>
|
||||
|
||||
#include <ifaddrs.h>
|
||||
#include <sys/param.h>
|
||||
#include <net/if_dl.h>
|
||||
|
||||
#include "upnpglobalvars.h"
|
||||
#include "getifaddr.h"
|
||||
#include "log.h"
|
||||
|
||||
int
|
||||
getifaddr(const char * ifname, char * buf, int len)
|
||||
{
|
||||
/* SIOCGIFADDR struct ifreq * */
|
||||
int s;
|
||||
struct ifreq ifr;
|
||||
int ifrlen;
|
||||
struct sockaddr_in * addr;
|
||||
ifrlen = sizeof(ifr);
|
||||
s = socket(PF_INET, SOCK_DGRAM, 0);
|
||||
if(s < 0)
|
||||
{
|
||||
DPRINTF(E_ERROR, L_GENERAL, "socket(PF_INET, SOCK_DGRAM): %s\n", strerror(errno));
|
||||
return -1;
|
||||
}
|
||||
strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
|
||||
if(ioctl(s, SIOCGIFADDR, &ifr, &ifrlen) < 0)
|
||||
{
|
||||
DPRINTF(E_ERROR, L_GENERAL, "ioctl(s, SIOCGIFADDR, ...): %s\n", strerror(errno));
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
addr = (struct sockaddr_in *)&ifr.ifr_addr;
|
||||
if(!inet_ntop(AF_INET, &addr->sin_addr, buf, len))
|
||||
{
|
||||
DPRINTF(E_ERROR, L_GENERAL, "inet_ntop(): %s\n", strerror(errno));
|
||||
close(s);
|
||||
return -1;
|
||||
}
|
||||
close(s);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
getsysifname(char * buf, size_t len)
|
||||
{
|
||||
int rv=-1;
|
||||
struct ifaddrs *ifap = NULL;
|
||||
struct ifaddrs *ifnr;
|
||||
|
||||
if (getifaddrs(&ifap) != 0)
|
||||
err(1, "getifaddrs");
|
||||
|
||||
for (ifnr = ifap; ifnr != NULL; ifnr = ifnr->ifa_next) {
|
||||
if (ifnr->ifa_addr->sa_family == AF_INET) {
|
||||
char *ifname=ifnr->ifa_name;
|
||||
struct sockaddr_in *addr_in =
|
||||
(struct sockaddr_in *)ifnr->ifa_addr;
|
||||
|
||||
unsigned a =
|
||||
(htonl(addr_in->sin_addr.s_addr) >> 0x18) & 0xFF;
|
||||
|
||||
if (a == 127)
|
||||
continue;
|
||||
|
||||
if(!inet_ntop(AF_INET, &addr_in->sin_addr, buf, len)) {
|
||||
warn("inet_ntop()");
|
||||
break;
|
||||
}
|
||||
strncpy(buf, ifname, len);
|
||||
break;
|
||||
}
|
||||
rv=0;
|
||||
}
|
||||
|
||||
freeifaddrs(ifap);
|
||||
return rv;
|
||||
}
|
||||
|
||||
int
|
||||
getsyshwaddr(char *buf, int len)
|
||||
{
|
||||
struct ifaddrs *ifap;
|
||||
char sysifname[256];
|
||||
int rv=-1;
|
||||
uint8_t node[6];
|
||||
struct ifaddrs *p;
|
||||
|
||||
if (getsysifname(sysifname, sizeof(sysifname)) != 0)
|
||||
return rv;
|
||||
|
||||
if (getifaddrs(&ifap) != 0)
|
||||
err(1, "getifaddrs");
|
||||
|
||||
for (p = ifap; p != NULL; p = p->ifa_next) {
|
||||
if (p->ifa_addr->sa_family == AF_LINK) {
|
||||
char *ifname=p->ifa_name;
|
||||
struct sockaddr_dl* sdp;
|
||||
|
||||
if (strncmp(sysifname, ifname, sizeof(sysifname)))
|
||||
continue;
|
||||
|
||||
sdp = (struct sockaddr_dl*) p->ifa_addr;
|
||||
memcpy(node, sdp->sdl_data + sdp->sdl_nlen, 6);
|
||||
if (len>12)
|
||||
sprintf(buf, "%02x%02x%02x%02x%02x%02x",
|
||||
node[0], node[1], node[2],
|
||||
node[3], node[4], node[5]);
|
||||
else
|
||||
memmove(buf, node, 6);
|
||||
rv=0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
freeifaddrs(ifap);
|
||||
return rv;
|
||||
}
|
||||
|
||||
int
|
||||
get_remote_mac(struct in_addr ip_addr, unsigned char *mac)
|
||||
{
|
||||
int found_entry=0;
|
||||
int mib[6];
|
||||
size_t needed;
|
||||
char *lim, *buf, *next;
|
||||
struct rt_msghdr *rtm;
|
||||
struct sockaddr_inarp *sin;
|
||||
struct sockaddr_dl *sdl;
|
||||
|
||||
mib[0] = CTL_NET;
|
||||
mib[1] = PF_ROUTE;
|
||||
mib[2] = 0;
|
||||
mib[3] = AF_INET;
|
||||
mib[4] = NET_RT_FLAGS;
|
||||
mib[5] = RTF_LLINFO;
|
||||
if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
|
||||
err(1, "route-sysctl-estimate");
|
||||
if ((buf = malloc(needed)) == NULL)
|
||||
err(1, "malloc");
|
||||
if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
|
||||
err(1, "actual retrieval of routing table");
|
||||
lim = buf + needed;
|
||||
for (next = buf; next < lim; next += rtm->rtm_msglen) {
|
||||
rtm = (struct rt_msghdr *)next;
|
||||
sin = (struct sockaddr_inarp *)(rtm + 1);
|
||||
sdl = (struct sockaddr_dl *)(sin + 1);
|
||||
if (ip_addr.s_addr != sin->sin_addr.s_addr)
|
||||
continue;
|
||||
if (sdl->sdl_alen) {
|
||||
found_entry = 1;
|
||||
memmove(mac, (u_char *)LLADDR(sdl), 6);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!found_entry)
|
||||
memset(mac, 0xFF, 6);
|
||||
free(buf);
|
||||
return !found_entry;
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
getsysaddrs(void)
|
||||
{
|
||||
struct sockaddr_in *addr;
|
||||
struct ifaddrs *ifap, *ifa;
|
||||
|
||||
getifaddrs(&ifap);
|
||||
for(ifa=ifap;ifa;ifa=ifa->ifa_next) {
|
||||
if(ifa->ifa_addr == NULL || ifa->ifa_netmask == NULL)
|
||||
continue;
|
||||
|
||||
addr = (struct sockaddr_in *) ifa->ifa_addr;
|
||||
if(addr->sin_family != AF_INET)
|
||||
continue;
|
||||
|
||||
memcpy(&lan_addr[n_lan_addr].addr, (void *) &addr->sin_addr, sizeof(lan_addr[n_lan_addr].addr));
|
||||
if( !inet_ntop(AF_INET, (void *) &addr->sin_addr, lan_addr[n_lan_addr].str, sizeof(lan_addr[0].str)) )
|
||||
{
|
||||
DPRINTF(E_ERROR, L_GENERAL, "inet_ntop(): %s\n", strerror(errno));
|
||||
continue;
|
||||
}
|
||||
|
||||
addr = (struct sockaddr_in *) ifa->ifa_netmask;
|
||||
memcpy(&lan_addr[n_lan_addr].mask, (void *) &addr->sin_addr, sizeof(lan_addr[n_lan_addr].mask));
|
||||
n_lan_addr++;
|
||||
if (n_lan_addr >= MAX_LAN_ADDR)
|
||||
break;
|
||||
}
|
||||
freeifaddrs(ifap);
|
||||
|
||||
return(n_lan_addr);
|
||||
}
|
@ -1,5 +1,4 @@
|
||||
#!/bin/sh
|
||||
|
||||
# $FreeBSD$
|
||||
#
|
||||
# PROVIDE: minidlna
|
||||
@ -14,21 +13,21 @@
|
||||
|
||||
name=minidlna
|
||||
rcvar=minidlna_enable
|
||||
command=%%PREFIX%%/sbin/minidlna
|
||||
command=%%PREFIX%%/sbin/minidlnad
|
||||
|
||||
load_rc_config $name
|
||||
|
||||
minidlna_enable=${minidlna_enable-"NO"}
|
||||
minidlna_uid=${minidlna_uid-"%%USER%%"}
|
||||
|
||||
pidfile="/var/db/minidlna/minidlna.pid"
|
||||
pidfile="/var/run/minidlna/minidlna.pid"
|
||||
|
||||
start_precmd="rm -f $pidfile"
|
||||
stop_postcmd=$start_precmd
|
||||
|
||||
command_args="-P $pidfile -u $minidlna_uid"
|
||||
command_args="-P $pidfile -u $minidlna_uid -f %%PREFIX%%/etc/minidlna.conf"
|
||||
extra_commands=rescan
|
||||
rescan_cmd="$command -R -u $minidlna_uid"
|
||||
required_dirs="/var/db/minidlna"
|
||||
rescan_cmd="$command -R -u $minidlna_uid -f %%PREFIX%%/etc/minidlna.conf"
|
||||
required_dirs="/var/run/minidlna /var/db/minidlna"
|
||||
|
||||
run_rc_command $1
|
||||
|
@ -1,141 +0,0 @@
|
||||
--- tagutils/tagutils.c 2010-12-13 01:41:52.000000000 -0500
|
||||
+++ tagutils/tagutils.c 2010-12-13 17:28:29.000000000 -0500
|
||||
@@ -36,6 +36,7 @@
|
||||
#include <vorbis/codec.h>
|
||||
#include <FLAC/metadata.h>
|
||||
+#include <libgen.h>
|
||||
|
||||
-#include "../config.h"
|
||||
+#include "config.h"
|
||||
#ifdef HAVE_ICONV_H
|
||||
#include <iconv.h>
|
||||
--- image_utils.c 2011-05-03 18:07:47.000000000 -0400
|
||||
+++ image_utils.c 2011-08-24 01:11:13.000000000 -0400
|
||||
@@ -34,5 +34,5 @@
|
||||
#include <setjmp.h>
|
||||
#include <jpeglib.h>
|
||||
-#include <endian.h>
|
||||
+#include <sys/endian.h>
|
||||
|
||||
#include "upnpreplyparse.h"
|
||||
--- upnpdescgen.c 2011-05-03 18:07:47.000000000 -0400
|
||||
+++ upnpdescgen.c 2011-08-24 01:32:48.000000000 -0400
|
||||
@@ -585,5 +585,5 @@
|
||||
const struct XMLElt * p)
|
||||
{
|
||||
- u_int16_t i, j, k;
|
||||
+ uint16_t i, j, k;
|
||||
int top;
|
||||
const char * eltname, *s;
|
||||
--- upnpglobalvars.c 2011-05-26 19:10:54.000000000 -0400
|
||||
+++ upnpglobalvars.c 2011-08-24 01:33:57.000000000 -0400
|
||||
@@ -49,5 +49,5 @@
|
||||
#include <sys/types.h>
|
||||
#include <netinet/in.h>
|
||||
-#include <linux/limits.h>
|
||||
+#include <limits.h>
|
||||
|
||||
#include "config.h"
|
||||
--- tagutils/misc.c 2010-11-11 18:48:14.000000000 -0500
|
||||
+++ tagutils/misc.c 2011-08-24 01:36:58.000000000 -0400
|
||||
@@ -22,5 +22,5 @@
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
-#include <endian.h>
|
||||
+#include <sys/endian.h>
|
||||
|
||||
#include "misc.h"
|
||||
--- uuid.c 2011-05-26 19:04:33.000000000 -0400
|
||||
+++ uuid.c 2011-08-24 01:56:11.000000000 -0400
|
||||
@@ -31,4 +31,5 @@
|
||||
#include <sys/syscall.h>
|
||||
#include <string.h>
|
||||
+#include <sys/socket.h>
|
||||
#include <net/if.h>
|
||||
#include <sys/ioctl.h>
|
||||
@@ -47,13 +48,4 @@
|
||||
static int clock_seq_initialized;
|
||||
|
||||
-unsigned long long
|
||||
-monotonic_us(void)
|
||||
-{
|
||||
- struct timespec ts;
|
||||
-
|
||||
- syscall(__NR_clock_gettime, CLOCK_MONOTONIC, &ts);
|
||||
- return ts.tv_sec * 1000000ULL + ts.tv_nsec / 1000;
|
||||
-}
|
||||
-
|
||||
-int
|
||||
+static int
|
||||
read_bootid_node(unsigned char *buf, size_t size)
|
||||
@@ -82,26 +74,13 @@
|
||||
read_random_bytes(unsigned char *buf, size_t size)
|
||||
{
|
||||
- int i;
|
||||
- pid_t pid;
|
||||
+ long r;
|
||||
+ srandomdev();
|
||||
|
||||
- i = open("/dev/urandom", O_RDONLY);
|
||||
- if(i >= 0)
|
||||
- {
|
||||
- read(i, buf, size);
|
||||
- close(i);
|
||||
- }
|
||||
- /* Paranoia. /dev/urandom may be missing.
|
||||
- * rand() is guaranteed to generate at least [0, 2^15) range,
|
||||
- * but lowest bits in some libc are not so "random". */
|
||||
- srand(monotonic_us());
|
||||
- pid = getpid();
|
||||
- while(1)
|
||||
- {
|
||||
- for(i = 0; i < size; i++)
|
||||
- buf[i] ^= rand() >> 5;
|
||||
- if(pid == 0)
|
||||
- break;
|
||||
- srand(pid);
|
||||
- pid = 0;
|
||||
+ while ((ssize_t)size > 0) {
|
||||
+ r = random();
|
||||
+ memcpy(buf, &r,
|
||||
+ size > sizeof(r) ? sizeof(r) : size);
|
||||
+ buf += sizeof(r);
|
||||
+ size -= sizeof(r);
|
||||
}
|
||||
}
|
||||
@@ -163,5 +142,5 @@
|
||||
* Gregorian reform to the Christian calendar).
|
||||
*/
|
||||
- syscall(__NR_clock_gettime, CLOCK_REALTIME, &ts);
|
||||
+ clock_gettime(CLOCK_REALTIME, &ts);
|
||||
time_all = ((u_int64_t)ts.tv_sec) * (NSEC_PER_SEC / 100);
|
||||
time_all += ts.tv_nsec / 100;
|
||||
--- tagutils/tagutils-asf.h 2010-11-11 18:48:14.000000000 -0500
|
||||
+++ tagutils/tagutils-asf.h 2011-08-24 01:57:26.000000000 -0400
|
||||
@@ -24,5 +24,5 @@
|
||||
#define __PACKED__ __attribute__((packed))
|
||||
|
||||
-#include <endian.h>
|
||||
+#include <sys/endian.h>
|
||||
|
||||
typedef struct _GUID {
|
||||
--- utils.c 2011-07-18 14:13:25.000000000 -0400
|
||||
+++ utils.c 2011-09-21 00:58:47.000000000 -0400
|
||||
@@ -207,11 +207,15 @@
|
||||
}
|
||||
|
||||
- if (mkdir(path, mode) < 0) {
|
||||
+ if (!(path[0] == '/' && s == path + 1) /* skip "/" */
|
||||
+ && mkdir(path, mode) < 0) {
|
||||
+ int e = errno;
|
||||
/* If we failed for any other reason than the directory
|
||||
* already exists, output a diagnostic and return -1.*/
|
||||
if (errno != EEXIST || (stat(path, &st) < 0 || !S_ISDIR(st.st_mode))) {
|
||||
- DPRINTF(E_WARN, L_GENERAL, "make_dir: cannot create directory '%s'\n", path);
|
||||
if (c)
|
||||
*s = c;
|
||||
+ DPRINTF(E_WARN, L_GENERAL, "make_dir: cannot "
|
||||
+ "create directory '%.*s' (to create %s): "
|
||||
+ "%s\n", s - path, path, path, strerror(e));
|
||||
return -1;
|
||||
}
|
@ -1,9 +0,0 @@
|
||||
--- tagutils/tagutils-misc.c 2010-12-13 01:41:52.000000000 -0500
|
||||
+++ tagutils/tagutils-misc.c 2010-12-13 17:31:49.000000000 -0500
|
||||
@@ -34,5 +34,5 @@
|
||||
static iconv_result
|
||||
do_iconv(const char* to_ces, const char* from_ces,
|
||||
- char *inbuf, size_t inbytesleft,
|
||||
+ const char *inbuf, size_t inbytesleft,
|
||||
char *outbuf_orig, size_t outbytesleft_orig)
|
||||
{
|
137
net/minidlna/files/patch-clang-inline
Normal file
137
net/minidlna/files/patch-clang-inline
Normal file
@ -0,0 +1,137 @@
|
||||
diff --git tagutils/misc.c tagutils/misc.c
|
||||
index 98ad543..5dc94e5 100644
|
||||
--- tagutils/misc.c
|
||||
+++ tagutils/misc.c
|
||||
@@ -30,7 +30,7 @@
|
||||
|
||||
#include "misc.h"
|
||||
|
||||
-inline __u16
|
||||
+__u16
|
||||
le16_to_cpu(__u16 le16)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
@@ -41,7 +41,7 @@ le16_to_cpu(__u16 le16)
|
||||
#endif
|
||||
}
|
||||
|
||||
-inline __u32
|
||||
+__u32
|
||||
le32_to_cpu(__u32 le32)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
@@ -56,7 +56,7 @@ le32_to_cpu(__u32 le32)
|
||||
#endif
|
||||
}
|
||||
|
||||
-inline __u64
|
||||
+__u64
|
||||
le64_to_cpu(__u64 le64)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
@@ -77,7 +77,7 @@ le64_to_cpu(__u64 le64)
|
||||
#endif
|
||||
}
|
||||
|
||||
-inline __u8
|
||||
+__u8
|
||||
fget_byte(FILE *fp)
|
||||
{
|
||||
__u8 d;
|
||||
@@ -87,7 +87,7 @@ fget_byte(FILE *fp)
|
||||
return d;
|
||||
}
|
||||
|
||||
-inline __u16
|
||||
+__u16
|
||||
fget_le16(FILE *fp)
|
||||
{
|
||||
__u16 d;
|
||||
@@ -98,7 +98,7 @@ fget_le16(FILE *fp)
|
||||
return d;
|
||||
}
|
||||
|
||||
-inline __u32
|
||||
+__u32
|
||||
fget_le32(FILE *fp)
|
||||
{
|
||||
__u32 d;
|
||||
@@ -109,7 +109,7 @@ fget_le32(FILE *fp)
|
||||
return d;
|
||||
}
|
||||
|
||||
-inline __u32
|
||||
+__u32
|
||||
cpu_to_be32(__u32 cpu32)
|
||||
{
|
||||
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
diff --git tagutils/misc.h tagutils/misc.h
|
||||
index c7642fe..fc488a1 100644
|
||||
--- tagutils/misc.h
|
||||
+++ tagutils/misc.h
|
||||
@@ -37,14 +37,14 @@ typedef signed long long __s64;
|
||||
#endif
|
||||
|
||||
|
||||
-inline __u16 le16_to_cpu(__u16 le16);
|
||||
-inline __u32 le32_to_cpu(__u32 le32);
|
||||
-inline __u64 le64_to_cpu(__u64 le64);
|
||||
-inline __u8 fget_byte(FILE *fp);
|
||||
-inline __u16 fget_le16(FILE *fp);
|
||||
-inline __u32 fget_le32(FILE *fp);
|
||||
-
|
||||
-inline __u32 cpu_to_be32(__u32 cpu32);
|
||||
+__u16 le16_to_cpu(__u16 le16);
|
||||
+__u32 le32_to_cpu(__u32 le32);
|
||||
+__u64 le64_to_cpu(__u64 le64);
|
||||
+__u8 fget_byte(FILE *fp);
|
||||
+__u16 fget_le16(FILE *fp);
|
||||
+__u32 fget_le32(FILE *fp);
|
||||
+
|
||||
+__u32 cpu_to_be32(__u32 cpu32);
|
||||
|
||||
extern char * sha1_hex(char *key);
|
||||
|
||||
diff --git utils.c utils.c
|
||||
index 57ae5a4..d46f2f0 100644
|
||||
--- utils.c
|
||||
+++ utils.c
|
||||
@@ -33,7 +33,7 @@
|
||||
#include "upnpglobalvars.h"
|
||||
#include "log.h"
|
||||
|
||||
-inline int
|
||||
+int
|
||||
strcatf(struct string_s *str, const char *fmt, ...)
|
||||
{
|
||||
int ret;
|
||||
@@ -52,14 +52,14 @@ strcatf(struct string_s *str, const char *fmt, ...)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-inline void
|
||||
+void
|
||||
strncpyt(char *dst, const char *src, size_t len)
|
||||
{
|
||||
strncpy(dst, src, len);
|
||||
dst[len-1] = '\0';
|
||||
}
|
||||
|
||||
-inline int
|
||||
+int
|
||||
xasprintf(char **strp, char *fmt, ...)
|
||||
{
|
||||
va_list args;
|
||||
diff --git utils.h utils.h
|
||||
index d9d49a4..fbff582 100644
|
||||
--- utils.h
|
||||
+++ utils.h
|
||||
@@ -29,7 +29,7 @@
|
||||
/* String functions */
|
||||
int strcatf(struct string_s *str, char *fmt, ...);
|
||||
void strncpyt(char *dst, const char *src, size_t len);
|
||||
-inline int xasprintf(char **strp, char *fmt, ...);
|
||||
+int xasprintf(char **strp, char *fmt, ...);
|
||||
int ends_with(const char * haystack, const char * needle);
|
||||
char *trim(char *str);
|
||||
char *strstrc(const char *s, const char *p, const char t);
|
12
net/minidlna/files/patch-clients.h
Normal file
12
net/minidlna/files/patch-clients.h
Normal file
@ -0,0 +1,12 @@
|
||||
diff --git clients.h clients.h
|
||||
index d3ffe1d..2a4c579 100644
|
||||
--- clients.h
|
||||
+++ clients.h
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef __CLIENTS_H__
|
||||
#define __CLIENTS_H__
|
||||
#include <stdint.h>
|
||||
+#include <sys/time.h>
|
||||
#include <netinet/in.h>
|
||||
|
||||
#define CLIENT_CACHE_SLOTS 20
|
@ -1,13 +0,0 @@
|
||||
--- minidlna.conf 2011-07-22 19:03:38.000000000 -0400
|
||||
+++ minidlna.conf 2011-09-21 01:02:25.000000000 -0400
|
||||
@@ -18,8 +18,8 @@
|
||||
|
||||
# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
|
||||
-#db_dir=/var/cache/minidlna
|
||||
+db_dir=/var/db/minidlna
|
||||
|
||||
# set this if you would like to specify the directory where you want MiniDLNA to store its log file
|
||||
-#log_dir=/var/log
|
||||
+log_dir=/var/db/minidlna
|
||||
|
||||
# this should be a list of file names to check for when searching for album art
|
13
net/minidlna/files/patch-getifaddr.c
Normal file
13
net/minidlna/files/patch-getifaddr.c
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git getifaddr.c getifaddr.c
|
||||
index 9c437b7..5eb6716 100644
|
||||
--- getifaddr.c
|
||||
+++ getifaddr.c
|
||||
@@ -175,7 +175,7 @@ getsysaddrs(void)
|
||||
if (p->ifa_addr && p->ifa_addr->sa_family == AF_INET)
|
||||
{
|
||||
addr_in = (struct sockaddr_in *)p->ifa_addr;
|
||||
- if (p->ifa_flags & (IFF_LOOPBACK | IFF_SLAVE))
|
||||
+ if (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)) )
|
@ -1,23 +0,0 @@
|
||||
--- tagutils/misc.h 2009-02-25 16:16:51.000000000 -0500
|
||||
+++ tagutils/misc.h 2010-07-08 07:30:12.000000000 -0400
|
||||
@@ -38,13 +38,12 @@
|
||||
#endif
|
||||
|
||||
+__u16 le16_to_cpu(__u16 le16);
|
||||
+__u32 le32_to_cpu(__u32 le32);
|
||||
+__u64 le64_to_cpu(__u64 le64);
|
||||
+__u8 fget_byte(FILE *fp);
|
||||
+__u16 fget_le16(FILE *fp);
|
||||
+__u32 fget_le32(FILE *fp);
|
||||
|
||||
-inline __u16 le16_to_cpu(__u16 le16);
|
||||
-inline __u32 le32_to_cpu(__u32 le32);
|
||||
-inline __u64 le64_to_cpu(__u64 le64);
|
||||
-inline __u8 fget_byte(FILE *fp);
|
||||
-inline __u16 fget_le16(FILE *fp);
|
||||
-inline __u32 fget_le32(FILE *fp);
|
||||
-
|
||||
-inline __u32 cpu_to_be32(__u32 cpu32);
|
||||
+__u32 cpu_to_be32(__u32 cpu32);
|
||||
|
||||
extern char * sha1_hex(char *key);
|
@ -1,19 +0,0 @@
|
||||
Patch from:
|
||||
|
||||
http://sourceforge.net/tracker/?func=detail&aid=3459128&group_id=243163&atid=1121518
|
||||
|
||||
diff -u -b -p -d -r1.104 upnpsoap.c
|
||||
--- upnpsoap.c 23 Nov 2011 22:41:42 -0000 1.104
|
||||
+++ upnpsoap.c 13 Dec 2011 20:45:33 -0000
|
||||
@@ -754,9 +754,9 @@ callback(void *args, int argc, char **ar
|
||||
ret = strcatf(str, " refID=\"%s\"", refID);
|
||||
}
|
||||
ret = strcatf(str, ">"
|
||||
- "<dc:title>%s</dc:title>"
|
||||
+ "<dc:title>%s%s</dc:title>"
|
||||
"<upnp:class>object.%s</upnp:class>",
|
||||
- title, class);
|
||||
+ title, ((strchr(title, '.') == NULL && (passed_args->filter & FILTER_RES) && *mime == 'v' && passed_args->client == ELGDevice) ? "." : ""), class);
|
||||
if( comment && (passed_args->filter & FILTER_DC_DESCRIPTION) ) {
|
||||
ret = strcatf(str, "<dc:description>%.384s</dc:description>", comment);
|
||||
}
|
@ -1,89 +0,0 @@
|
||||
--- minidlna.c 2012-02-14 13:26:53.000000000 -0500
|
||||
+++ minidlna.c 2012-04-11 11:18:28.000000000 -0400
|
||||
@@ -53,4 +53,5 @@
|
||||
#include <ctype.h>
|
||||
#include <sys/types.h>
|
||||
+#include <sys/stat.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
@@ -66,4 +67,8 @@
|
||||
#include <pwd.h>
|
||||
|
||||
+#include <err.h>
|
||||
+#include <stdint.h>
|
||||
+#include <sysexits.h>
|
||||
+
|
||||
#include "config.h"
|
||||
|
||||
@@ -86,5 +91,7 @@
|
||||
#include "upnpevents.h"
|
||||
#include "scanner.h"
|
||||
+#ifdef __linux__
|
||||
#include "inotify.h"
|
||||
+#endif
|
||||
#include "log.h"
|
||||
#ifdef TIVO_SUPPORT
|
||||
@@ -342,5 +349,5 @@
|
||||
struct sigaction sa;
|
||||
const char * presurl = NULL;
|
||||
- const char * optionsfile = "/etc/minidlna.conf";
|
||||
+ const char * optionsfile = PREFIX "/etc/minidlna.conf";
|
||||
char mac_str[13];
|
||||
char * string, * word;
|
||||
@@ -352,4 +359,5 @@
|
||||
char *log_level = NULL;
|
||||
|
||||
+ uid_t uid = (uid_t)-1;
|
||||
/* first check if "-f" option is used */
|
||||
for(i=2; i<argc; i++)
|
||||
@@ -740,4 +748,21 @@
|
||||
exit(0);
|
||||
break;
|
||||
+ case 'u':
|
||||
+ if(i+1 == argc)
|
||||
+ err(EX_USAGE, "Option -%c takes one argument.", argv[i][1]);
|
||||
+ else {
|
||||
+ char *endp;
|
||||
+ i++;
|
||||
+ uid = strtol(argv[i], &endp, 0);
|
||||
+ if (*endp) {
|
||||
+ /* Symbolic username given, not UID. */
|
||||
+ struct passwd *entry = getpwnam(argv[i]);
|
||||
+
|
||||
+ if (entry == NULL)
|
||||
+ err(EX_NOUSER, "%s", argv[i]);
|
||||
+ uid = entry->pw_uid;
|
||||
+ }
|
||||
+ }
|
||||
+ break;
|
||||
default:
|
||||
DPRINTF(E_ERROR, L_GENERAL, "Unknown option: %s\n", argv[i]);
|
||||
@@ -767,4 +792,5 @@
|
||||
"\t\t[-s serial] [-m model_number] \n"
|
||||
"\t\t[-t notify_interval] [-P pid_filename]\n"
|
||||
+ "\t\t[-u uid_to_run_as]\n"
|
||||
"\t\t[-w url] [-R] [-V] [-h]\n"
|
||||
"\nNotes:\n\tNotify interval is in seconds. Default is 895 seconds.\n"
|
||||
@@ -839,4 +865,7 @@
|
||||
writepidfile(pidfilename, pid);
|
||||
|
||||
+ if (uid != (uid_t)-1 && setuid(uid) == -1)
|
||||
+ err(EX_NOPERM, "setuid(%ld)", (long)uid);
|
||||
+
|
||||
return 0;
|
||||
}
|
||||
@@ -965,4 +995,5 @@
|
||||
}
|
||||
signal(SIGCHLD, SIG_IGN);
|
||||
+#if defined(__linux__)
|
||||
if( sqlite3_threadsafe() && sqlite3_libversion_number() >= 3005001 &&
|
||||
GETFLAG(INOTIFY_MASK) && pthread_create(&inotify_thread, NULL, start_inotify, NULL) )
|
||||
@@ -970,6 +1001,7 @@
|
||||
DPRINTF(E_FATAL, L_GENERAL, "ERROR: pthread_create() failed for start_inotify.\n");
|
||||
}
|
||||
+#endif
|
||||
|
||||
- sudp = OpenAndConfSSDPReceiveSocket(n_lan_addr, lan_addr);
|
||||
+ sudp = OpenAndConfSSDPReceiveSocket();
|
||||
if(sudp < 0)
|
||||
{
|
13
net/minidlna/files/patch-minidlna.conf
Normal file
13
net/minidlna/files/patch-minidlna.conf
Normal file
@ -0,0 +1,13 @@
|
||||
diff --git minidlna.conf minidlna.conf
|
||||
index bfb71d5..b579912 100644
|
||||
--- minidlna.conf
|
||||
+++ minidlna.conf
|
||||
@@ -21,7 +21,7 @@ media_dir=/opt
|
||||
#friendly_name=My DLNA Server
|
||||
|
||||
# set this if you would like to specify the directory where you want MiniDLNA to store its database and album art cache
|
||||
-#db_dir=/var/cache/minidlna
|
||||
+#db_dir=/var/db/minidlna
|
||||
|
||||
# set this if you would like to specify the directory where you want MiniDLNA to store its log file
|
||||
#log_dir=/var/log
|
@ -1,25 +0,0 @@
|
||||
Allowing SSDP M-SEARCH from other subnets. See:
|
||||
http://sourceforge.net/tracker/?func=detail&aid=3495642&group_id=243163&atid=1121518
|
||||
--- minissdp.c
|
||||
+++ minissdp.c
|
||||
@@ -674,9 +674,17 @@ ProcessSSDPRequest(int s, unsigned short
|
||||
}
|
||||
if( i == n_lan_addr )
|
||||
{
|
||||
- DPRINTF(E_DEBUG, L_SSDP, "Ignoring SSDP M-SEARCH on other interface [%s]\n",
|
||||
- inet_ntoa(sendername.sin_addr));
|
||||
- return;
|
||||
+ if( n_lan_addr == 1 )
|
||||
+ {
|
||||
+ DPRINTF(E_INFO, L_SSDP, "SSDP M-SEARCH coming from another subnet [%s]\n",
|
||||
+ inet_ntoa(sendername.sin_addr));
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ DPRINTF(E_DEBUG, L_SSDP, "Ignoring SSDP M-SEARCH on other interface [%s]\n",
|
||||
+ inet_ntoa(sendername.sin_addr));
|
||||
+ return;
|
||||
+ }
|
||||
}
|
||||
DPRINTF(E_INFO, L_SSDP, "SSDP M-SEARCH from %s:%d ST: %.*s, MX: %.*s, MAN: %.*s\n",
|
||||
inet_ntoa(sendername.sin_addr),
|
@ -1,16 +0,0 @@
|
||||
See
|
||||
http://sourceforge.net/tracker/?func=detail&aid=3511519&group_id=243163&atid=1121518
|
||||
--- metadata.c 2012-02-14 22:44:56.000000000 +0400
|
||||
+++ metadata.c 2012-03-28 10:55:52.000000000 +0400
|
||||
@@ -160,8 +160,8 @@
|
||||
/* If we weren't given a detail ID, look for one. */
|
||||
if( !detailID )
|
||||
{
|
||||
- id = sql_get_text_field(db, "SELECT ID from DETAILS where PATH glob '%q.*'"
|
||||
- " and MIME glob 'video/*' limit 1", file);
|
||||
+ id = sql_get_text_field(db, "SELECT ID from DETAILS where (PATH > '%q.' and PATH <= '%q.z'"
|
||||
+ " and MIME > 'video/' and MIME <= 'video/z') limit 1", file, file);
|
||||
if( id )
|
||||
{
|
||||
//DEBUG DPRINTF(E_DEBUG, L_METADATA, "New file %s looks like a caption file.\n", path);
|
||||
|
@ -1,52 +0,0 @@
|
||||
diff --git log.c log.c
|
||||
index 91aa564..3f3b503 100644
|
||||
--- log.c
|
||||
+++ log.c
|
||||
@@ -63,14 +63,14 @@ log_init(const char *fname, const char *debug)
|
||||
if (debug)
|
||||
{
|
||||
const char *rhs, *lhs, *nlhs, *p;
|
||||
- int n;
|
||||
+ size_t n;
|
||||
int level, facility;
|
||||
memset(&log_level_set, 0, sizeof(log_level_set));
|
||||
rhs = nlhs = debug;
|
||||
while (rhs && (rhs = strchr(rhs, '='))) {
|
||||
rhs++;
|
||||
p = strchr(rhs, ',');
|
||||
- n = p ? p - rhs : strlen(rhs);
|
||||
+ n = p ? (size_t) (p - rhs) : strlen(rhs);
|
||||
for (level=0; level_name[level]; level++) {
|
||||
if (!(strncasecmp(level_name[level], rhs, n)))
|
||||
break;
|
||||
@@ -84,7 +84,7 @@ log_init(const char *fname, const char *debug)
|
||||
do {
|
||||
if (*lhs==',') lhs++;
|
||||
p = strpbrk(lhs, ",=");
|
||||
- n = p ? p - lhs : strlen(lhs);
|
||||
+ n = p ? (size_t) (p - lhs) : strlen(lhs);
|
||||
for (facility=0; facility_name[facility]; facility++) {
|
||||
if (!(strncasecmp(facility_name[facility], lhs, n)))
|
||||
break;
|
||||
diff --git tagutils/tagutils-wav.c tagutils/tagutils-wav.c
|
||||
index 956eef7..f2e397e 100644
|
||||
--- tagutils/tagutils-wav.c
|
||||
+++ tagutils/tagutils-wav.c
|
||||
@@ -33,7 +33,7 @@ static int
|
||||
_get_wavtags(char *filename, struct song_metadata *psong)
|
||||
{
|
||||
int fd;
|
||||
- uint32_t len;
|
||||
+ ssize_t len;
|
||||
unsigned char hdr[12];
|
||||
unsigned char fmt[16];
|
||||
//uint32_t chunk_data_length;
|
||||
@@ -47,7 +47,7 @@ _get_wavtags(char *filename, struct song_metadata *psong)
|
||||
uint32_t sec, ms;
|
||||
|
||||
uint32_t current_offset;
|
||||
- uint32_t block_len;
|
||||
+ int32_t block_len;
|
||||
|
||||
//DEBUG DPRINTF(E_DEBUG,L_SCANNER,"Getting WAV file info\n");
|
||||
|
@ -1,60 +0,0 @@
|
||||
--- upnphttp.c 2010-12-13 01:41:52.000000000 -0500
|
||||
+++ upnphttp.c 2010-12-13 17:28:08.000000000 -0500
|
||||
@@ -66,5 +66,4 @@
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
-#include <sys/sendfile.h>
|
||||
#include <arpa/inet.h>
|
||||
|
||||
@@ -80,10 +79,16 @@
|
||||
#include "tivo_commands.h"
|
||||
#endif
|
||||
+#ifdef __linux__
|
||||
//#define MAX_BUFFER_SIZE 4194304 // 4MB -- Too much?
|
||||
#define MAX_BUFFER_SIZE 2147483647 // 2GB -- Too much?
|
||||
#define MIN_BUFFER_SIZE 65536
|
||||
+#endif
|
||||
|
||||
#include "icons.c"
|
||||
|
||||
+#ifndef MSG_MORE /* A Linux-only flag for send(2) */
|
||||
+# define MSG_MORE 0
|
||||
+#endif
|
||||
+
|
||||
struct upnphttp *
|
||||
New_upnphttp(int s)
|
||||
@@ -1115,6 +1120,7 @@
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
send_file(struct upnphttp * h, int sendfd, off_t offset, off_t end_offset)
|
||||
+#if defined(__linux__)
|
||||
{
|
||||
off_t send_size;
|
||||
@@ -1166,4 +1172,25 @@
|
||||
free(buf);
|
||||
}
|
||||
+#elif defined(__FreeBSD__) || defined(__NetBSD__) || \
|
||||
+ defined(__OpenBSD__) || defined(__DragonFlyBSD__)
|
||||
+{
|
||||
+
|
||||
+ off_t sent;
|
||||
+
|
||||
+ while (offset < end_offset)
|
||||
+ {
|
||||
+ if (sendfile(sendfd, h->socket, offset,
|
||||
+ end_offset - offset + 1, NULL, &sent, SF_MNOWAIT) == -1) {
|
||||
+ DPRINTF(E_ERROR, L_HTTP,
|
||||
+ "sendfile error :: error no. %d [%s]\n",
|
||||
+ errno, strerror(errno));
|
||||
+ if (errno != EAGAIN)
|
||||
+ break;
|
||||
+ }
|
||||
+ offset += sent;
|
||||
+
|
||||
+ }
|
||||
+}
|
||||
+#endif
|
||||
|
||||
void
|
@ -1,11 +1,8 @@
|
||||
Submitted by Vladimir B. Grebenschikov this patch recognizes Samsung's
|
||||
images as JPEGs.
|
||||
|
||||
diff --git utils.c utils.c
|
||||
index 36ff168..5a7ff87 100644
|
||||
index d46f2f0..15e7905 100644
|
||||
--- utils.c
|
||||
+++ utils.c
|
||||
@@ -324,7 +324,7 @@ is_audio(const char * file)
|
||||
@@ -396,7 +396,7 @@ is_audio(const char * file)
|
||||
int
|
||||
is_image(const char * file)
|
||||
{
|
@ -1,850 +0,0 @@
|
||||
diff --git albumart.c albumart.c
|
||||
index 54899c6..6cc6192 100644
|
||||
--- albumart.c
|
||||
+++ albumart.c
|
||||
@@ -156,7 +156,7 @@ update_if_album_art(const char *path)
|
||||
closedir(dh);
|
||||
}
|
||||
|
||||
-char *
|
||||
+static char *
|
||||
check_embedded_art(const char *path, const char *image_data, int image_size)
|
||||
{
|
||||
int width = 0, height = 0;
|
||||
@@ -217,7 +217,7 @@ check_embedded_art(const char *path, const char *image_data, int image_size)
|
||||
}
|
||||
else if( width > 0 && height > 0 )
|
||||
{
|
||||
- size_t nwritten;
|
||||
+ int nwritten;
|
||||
if( art_cache_exists(path, &art_path) )
|
||||
goto end_art;
|
||||
cache_dir = strdup(art_path);
|
||||
diff --git image_utils.c image_utils.c
|
||||
index ee4fcf3..09330a3 100644
|
||||
--- image_utils.c
|
||||
+++ image_utils.c
|
||||
@@ -172,7 +172,7 @@ term_source(j_decompress_ptr cinfo)
|
||||
return;
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
jpeg_memory_src(j_decompress_ptr cinfo, const unsigned char * buffer, size_t bufsize)
|
||||
{
|
||||
struct my_src_mgr *src;
|
||||
@@ -208,7 +208,7 @@ image_free(image_s *pimage)
|
||||
free(pimage);
|
||||
}
|
||||
|
||||
-pix
|
||||
+static pix
|
||||
get_pix(image_s *pimage, int32_t x, int32_t y)
|
||||
{
|
||||
if((x >= 0) && (y >= 0) && (x < pimage->width) && (y < pimage->height))
|
||||
@@ -222,7 +222,7 @@ get_pix(image_s *pimage, int32_t x, int32_t y)
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
put_pix_alpha_replace(image_s *pimage, int32_t x, int32_t y, pix col)
|
||||
{
|
||||
if((x >= 0) && (y >= 0) && (x < pimage->width) && (y < pimage->height))
|
||||
@@ -398,7 +398,7 @@ image_get_jpeg_date_xmp(const char * path, char ** date)
|
||||
return ret;
|
||||
}
|
||||
|
||||
-image_s *
|
||||
+static image_s *
|
||||
image_new(int32_t width, int32_t height)
|
||||
{
|
||||
image_s *vimage;
|
||||
@@ -563,7 +563,7 @@ image_new_from_jpeg(const char * path, int is_file, const char * buf, int size,
|
||||
return vimage;
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
image_upsize(image_s * pdest, image_s * psrc, int32_t width, int32_t height)
|
||||
{
|
||||
int32_t vx, vy;
|
||||
@@ -626,7 +626,7 @@ image_upsize(image_s * pdest, image_s * psrc, int32_t width, int32_t height)
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
image_downsize(image_s * pdest, image_s * psrc, int32_t width, int32_t height)
|
||||
{
|
||||
int32_t vx, vy;
|
||||
diff --git metadata.c metadata.c
|
||||
index 39a65ef..0ce2ceb 100644
|
||||
--- metadata.c
|
||||
+++ metadata.c
|
||||
@@ -21,6 +21,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
+#include <libgen.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
@@ -118,7 +119,7 @@ lav_close(AVFormatContext *ctx)
|
||||
}
|
||||
|
||||
#if LIBAVFORMAT_VERSION_INT >= ((52<<16)+(31<<8)+0)
|
||||
-# if LIBAVUTIL_VERSION_INT < ((51<<16)+(5<<8)+0)
|
||||
+# if LIBAVUTIL_VERSION_INT < ((51<<16)+(5<<8)+0) && LIBAVUTIL_VERSION_INT < AV_VERSION_INT(50, 43, 0)
|
||||
#define AV_DICT_IGNORE_SUFFIX AV_METADATA_IGNORE_SUFFIX
|
||||
#define av_dict_get av_metadata_get
|
||||
typedef AVMetadataTag AVDictionaryEntry;
|
||||
@@ -129,7 +130,7 @@ typedef AVMetadataTag AVDictionaryEntry;
|
||||
#define MPEG_TS_SYNC_CODE 0x47
|
||||
#define MPEG_TS_PACKET_LENGTH 188
|
||||
#define MPEG_TS_PACKET_LENGTH_DLNA 192 /* prepends 4 bytes to TS packet */
|
||||
-int
|
||||
+static int
|
||||
dlna_timestamp_is_present(const char * filename, int * raw_packet_size)
|
||||
{
|
||||
unsigned char buffer[3*MPEG_TS_PACKET_LENGTH_DLNA];
|
||||
@@ -222,7 +223,7 @@ no_source_video:
|
||||
free(file);
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
parse_nfo(const char * path, metadata_t * m)
|
||||
{
|
||||
FILE *nfo;
|
||||
@@ -273,7 +274,7 @@ parse_nfo(const char * path, metadata_t * m)
|
||||
fclose(nfo);
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
free_metadata(metadata_t * m, uint32_t flags)
|
||||
{
|
||||
if( flags & FLAG_TITLE )
|
||||
@@ -712,7 +713,8 @@ sqlite_int64
|
||||
GetVideoMetadata(const char * path, char * name)
|
||||
{
|
||||
struct stat file;
|
||||
- int ret, i;
|
||||
+ int ret;
|
||||
+ unsigned i;
|
||||
struct tm *modtime;
|
||||
AVFormatContext *ctx = NULL;
|
||||
AVCodecContext *ac = NULL, *vc = NULL;
|
||||
diff --git minissdp.c minissdp.c
|
||||
index 81ae23e..ac492db 100644
|
||||
--- minissdp.c
|
||||
+++ minissdp.c
|
||||
@@ -292,7 +292,8 @@ SendSSDPNotifies(int s, const char * host, unsigned short port,
|
||||
unsigned int lifetime)
|
||||
{
|
||||
struct sockaddr_in sockname;
|
||||
- int l, n, dup, i=0;
|
||||
+ int n, dup, i=0;
|
||||
+ size_t l;
|
||||
char bufr[512];
|
||||
|
||||
memset(&sockname, 0, sizeof(struct sockaddr_in));
|
||||
@@ -355,7 +356,7 @@ SendSSDPNotifies2(int * sockets,
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
ParseUPnPClient(char *location)
|
||||
{
|
||||
char buf[8192];
|
||||
diff --git minissdp.h minissdp.h
|
||||
index bcc7ff4..be8cb5d 100644
|
||||
--- minissdp.h
|
||||
+++ minissdp.h
|
||||
@@ -32,7 +32,7 @@
|
||||
/*#include "minidlnatypes.h"*/
|
||||
|
||||
int
|
||||
-OpenAndConfSSDPReceiveSocket();
|
||||
+OpenAndConfSSDPReceiveSocket(void);
|
||||
/* OpenAndConfSSDPReceiveSocket(int n_lan_addr, struct lan_addr_s * lan_addr);*/
|
||||
|
||||
/*int
|
||||
diff --git minixml.c minixml.c
|
||||
index 3dfb9a2..0831443 100644
|
||||
--- minixml.c
|
||||
+++ minixml.c
|
||||
@@ -34,7 +34,7 @@ POSSIBILITY OF SUCH DAMAGE.
|
||||
/* parseatt : used to parse the argument list
|
||||
* return 0 (false) in case of success and -1 (true) if the end
|
||||
* of the xmlbuffer is reached. */
|
||||
-int parseatt(struct xmlparser * p)
|
||||
+static int parseatt(struct xmlparser * p)
|
||||
{
|
||||
const char * attname;
|
||||
int attnamelen;
|
||||
@@ -105,7 +105,7 @@ int parseatt(struct xmlparser * p)
|
||||
|
||||
/* parseelt parse the xml stream and
|
||||
* call the callback functions when needed... */
|
||||
-void parseelt(struct xmlparser * p)
|
||||
+static void parseelt(struct xmlparser * p)
|
||||
{
|
||||
int i;
|
||||
const char * elementname;
|
||||
diff --git options.c options.c
|
||||
index 435cf9b..1b2d825 100644
|
||||
--- options.c
|
||||
+++ options.c
|
||||
@@ -74,7 +74,7 @@ readoptionsfile(const char * fname)
|
||||
char *value;
|
||||
char *t;
|
||||
int linenum = 0;
|
||||
- int i;
|
||||
+ size_t i;
|
||||
enum upnpconfigoptions id;
|
||||
|
||||
if(!fname || (strlen(fname) == 0))
|
||||
diff --git playlist.c playlist.c
|
||||
index 789b48c..8cf1df7 100644
|
||||
--- playlist.c
|
||||
+++ playlist.c
|
||||
@@ -35,6 +35,7 @@
|
||||
#include "utils.h"
|
||||
#include "sql.h"
|
||||
#include "log.h"
|
||||
+#include "playlist.h"
|
||||
|
||||
int
|
||||
insert_playlist(const char * path, char * name)
|
||||
diff --git scanner.c scanner.c
|
||||
index dc10229..abd0c89 100644
|
||||
--- scanner.c
|
||||
+++ scanner.c
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <locale.h>
|
||||
#include <libgen.h>
|
||||
#include <inttypes.h>
|
||||
+#include <limits.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/resource.h>
|
||||
@@ -76,7 +77,7 @@ get_next_available_id(const char * table, const char * parentID)
|
||||
return objectID;
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
insert_container(const char * item, const char * rootParent, const char * refID, const char *class,
|
||||
const char *artist, const char *genre, const char *album_art, sqlite3_int64 *objectID, sqlite3_int64 *parentID)
|
||||
{
|
||||
@@ -169,7 +170,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
else
|
||||
{
|
||||
insert_container(date_taken, IMAGE_DATE_ID, NULL, "album.photoAlbum", NULL, NULL, NULL, &objectID, &parentID);
|
||||
- sprintf(last_date.parentID, IMAGE_DATE_ID"$%"PRIX64, parentID);
|
||||
+ sprintf(last_date.parentID, IMAGE_DATE_ID"$%"PRIX64, (int64_t)parentID);
|
||||
last_date.objectID = objectID;
|
||||
strcpy(last_date.name, date_taken);
|
||||
//DEBUG DPRINTF(E_DEBUG, L_SCANNER, "Creating cached date item: %s/%s/%X\n", last_date.name, last_date.parentID, last_date.objectID);
|
||||
@@ -192,7 +193,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
if( !valid_cache || strcmp(camera, last_cam.name) != 0 )
|
||||
{
|
||||
insert_container(camera, IMAGE_CAMERA_ID, NULL, "storageFolder", NULL, NULL, NULL, &objectID, &parentID);
|
||||
- sprintf(last_cam.parentID, IMAGE_CAMERA_ID"$%"PRIX64, parentID);
|
||||
+ sprintf(last_cam.parentID, IMAGE_CAMERA_ID"$%"PRIX64, (int64_t)parentID);
|
||||
strncpy(last_cam.name, camera, 255);
|
||||
last_camdate.name[0] = '\0';
|
||||
}
|
||||
@@ -204,7 +205,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
else
|
||||
{
|
||||
insert_container(date_taken, last_cam.parentID, NULL, "album.photoAlbum", NULL, NULL, NULL, &objectID, &parentID);
|
||||
- sprintf(last_camdate.parentID, "%s$%"PRIX64, last_cam.parentID, parentID);
|
||||
+ sprintf(last_camdate.parentID, "%s$%"PRIX64, last_cam.parentID, (int64_t)parentID);
|
||||
last_camdate.objectID = objectID;
|
||||
strcpy(last_camdate.name, date_taken);
|
||||
//DEBUG DPRINTF(E_DEBUG, L_SCANNER, "Creating cached camdate item: %s/%s/%s/%X\n", camera, last_camdate.name, last_camdate.parentID, last_camdate.objectID);
|
||||
@@ -273,12 +274,12 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
if( !valid_cache || strcmp(artist, last_artist.name) != 0 )
|
||||
{
|
||||
insert_container(artist, MUSIC_ARTIST_ID, NULL, "person.musicArtist", NULL, genre, NULL, &objectID, &parentID);
|
||||
- sprintf(last_artist.parentID, MUSIC_ARTIST_ID"$%"PRIX64, parentID);
|
||||
+ sprintf(last_artist.parentID, MUSIC_ARTIST_ID"$%"PRIX64, (int64_t)parentID);
|
||||
strcpy(last_artist.name, artist);
|
||||
last_artistAlbum.name[0] = '\0';
|
||||
/* Add this file to the "- All Albums -" container as well */
|
||||
insert_container(_("- All Albums -"), last_artist.parentID, NULL, "album", artist, genre, NULL, &objectID, &parentID);
|
||||
- sprintf(last_artistAlbumAll.parentID, "%s$%"PRIX64, last_artist.parentID, parentID);
|
||||
+ sprintf(last_artistAlbumAll.parentID, "%s$%"PRIX64, last_artist.parentID, (int64_t)parentID);
|
||||
last_artistAlbumAll.objectID = objectID;
|
||||
}
|
||||
else
|
||||
@@ -294,7 +295,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
{
|
||||
insert_container(album?album:_("Unknown Album"), last_artist.parentID, album?last_album.parentID:NULL,
|
||||
"album.musicAlbum", artist, genre, album_art, &objectID, &parentID);
|
||||
- sprintf(last_artistAlbum.parentID, "%s$%"PRIX64, last_artist.parentID, parentID);
|
||||
+ sprintf(last_artistAlbum.parentID, "%s$%"PRIX64, last_artist.parentID, (int64_t)parentID);
|
||||
last_artistAlbum.objectID = objectID;
|
||||
strcpy(last_artistAlbum.name, album?album:_("Unknown Album"));
|
||||
//DEBUG DPRINTF(E_DEBUG, L_SCANNER, "Creating cached artist/album item: %s/%s/%X\n", last_artist.name, last_artist.parentID, last_artist.objectID);
|
||||
@@ -315,12 +316,12 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
if( !valid_cache || strcmp(genre, last_genre.name) != 0 )
|
||||
{
|
||||
insert_container(genre, MUSIC_GENRE_ID, NULL, "genre.musicGenre", NULL, NULL, NULL, &objectID, &parentID);
|
||||
- sprintf(last_genre.parentID, MUSIC_GENRE_ID"$%"PRIX64, parentID);
|
||||
+ sprintf(last_genre.parentID, MUSIC_GENRE_ID"$%"PRIX64, (int64_t)parentID);
|
||||
strcpy(last_genre.name, genre);
|
||||
last_genreArtist.name[0] = '\0';
|
||||
/* Add this file to the "- All Artists -" container as well */
|
||||
insert_container(_("- All Artists -"), last_genre.parentID, NULL, "person", NULL, genre, NULL, &objectID, &parentID);
|
||||
- sprintf(last_genreArtistAll.parentID, "%s$%"PRIX64, last_genre.parentID, parentID);
|
||||
+ sprintf(last_genreArtistAll.parentID, "%s$%"PRIX64, last_genre.parentID, (int64_t)parentID);
|
||||
last_genreArtistAll.objectID = objectID;
|
||||
}
|
||||
else
|
||||
@@ -335,7 +336,7 @@ insert_containers(const char * name, const char *path, const char * refID, const
|
||||
{
|
||||
insert_container(artist?artist:_("Unknown Artist"), last_genre.parentID, artist?last_artist.parentID:NULL,
|
||||
"person.musicArtist", NULL, genre, NULL, &objectID, &parentID);
|
||||
- sprintf(last_genreArtist.parentID, "%s$%"PRIX64, last_genre.parentID, parentID);
|
||||
+ sprintf(last_genreArtist.parentID, "%s$%"PRIX64, last_genre.parentID, (int64_t)parentID);
|
||||
last_genreArtist.objectID = objectID;
|
||||
strcpy(last_genreArtist.name, artist?artist:_("Unknown Artist"));
|
||||
//DEBUG DPRINTF(E_DEBUG, L_SCANNER, "Creating cached genre/artist item: %s/%s/%X\n", last_genreArtist.name, last_genreArtist.parentID, last_genreArtist.objectID);
|
||||
@@ -659,7 +660,7 @@ sql_failed:
|
||||
return (ret != SQLITE_OK);
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
filter_audio(const struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
@@ -673,7 +674,7 @@ filter_audio(const struct dirent *d)
|
||||
) ));
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
filter_video(const struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
@@ -685,7 +686,7 @@ filter_video(const struct dirent *d)
|
||||
) );
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
filter_images(const struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
@@ -697,7 +698,7 @@ filter_images(const struct dirent *d)
|
||||
) );
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
filter_media(const struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
@@ -713,7 +714,7 @@ filter_media(const struct dirent *d)
|
||||
) ));
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
ScanDirectory(const char * dir, const char * parent, enum media_types dir_type)
|
||||
{
|
||||
struct dirent **namelist;
|
||||
@@ -804,7 +805,7 @@ ScanDirectory(const char * dir, const char * parent, enum media_types dir_type)
|
||||
}
|
||||
|
||||
void
|
||||
-start_scanner()
|
||||
+start_scanner(void)
|
||||
{
|
||||
struct media_dir_s * media_path = media_dirs;
|
||||
char name[PATH_MAX];
|
||||
diff --git scanner.h scanner.h
|
||||
index a57eedd..7eaa3a0 100644
|
||||
--- scanner.h
|
||||
+++ scanner.h
|
||||
@@ -81,6 +81,6 @@ int
|
||||
CreateDatabase(void);
|
||||
|
||||
void
|
||||
-start_scanner();
|
||||
+start_scanner(void);
|
||||
|
||||
#endif
|
||||
diff --git tagutils/tagutils-aac.c tagutils/tagutils-aac.c
|
||||
index 4224d5f..609710a 100644
|
||||
--- tagutils/tagutils-aac.c
|
||||
+++ tagutils/tagutils-aac.c
|
||||
@@ -81,7 +81,7 @@ _get_aactags(char *file, struct song_metadata *psong)
|
||||
long atom_offset;
|
||||
unsigned int atom_length;
|
||||
|
||||
- long current_offset = 0;
|
||||
+ unsigned int current_offset = 0;
|
||||
int current_size;
|
||||
char current_atom[4];
|
||||
char *current_data;
|
||||
@@ -119,7 +119,7 @@ _get_aactags(char *file, struct song_metadata *psong)
|
||||
current_data = (char*)malloc(len); // extra byte
|
||||
memset(current_data, 0x00, len);
|
||||
|
||||
- if(fread(current_data, 1, current_size - 8, fin) != current_size - 8)
|
||||
+ if((int)fread(current_data, 1, current_size - 8, fin) != current_size - 8)
|
||||
break;
|
||||
|
||||
if(!memcmp(current_atom, "\xA9" "nam", 4))
|
||||
@@ -243,7 +243,7 @@ _aac_lookforatom(FILE *aac_fp, char *atom_path, unsigned int *atom_length)
|
||||
return ftell(aac_fp) - 8;
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
_aac_check_extended_descriptor(FILE *infile)
|
||||
{
|
||||
short int i;
|
||||
diff --git tagutils/tagutils-asf.c tagutils/tagutils-asf.c
|
||||
index 11da1ae..abc5b78 100644
|
||||
--- tagutils/tagutils-asf.c
|
||||
+++ tagutils/tagutils-asf.c
|
||||
@@ -23,7 +23,7 @@
|
||||
static int
|
||||
_asf_read_file_properties(FILE *fp, asf_file_properties_t *p, __u32 size)
|
||||
{
|
||||
- int len;
|
||||
+ unsigned int len;
|
||||
|
||||
len = sizeof(*p) - offsetof(asf_file_properties_t, FileID);
|
||||
if(size < len)
|
||||
@@ -66,10 +66,10 @@ static int
|
||||
_asf_read_audio_stream(FILE *fp, struct song_metadata *psong, int size)
|
||||
{
|
||||
asf_audio_stream_t s;
|
||||
- int len;
|
||||
+ unsigned long len;
|
||||
|
||||
len = sizeof(s) - sizeof(s.Hdr);
|
||||
- if(len > size)
|
||||
+ if(len > (unsigned long) size)
|
||||
len = size;
|
||||
|
||||
if(len != fread(&s.wfx, 1, len, fp))
|
||||
@@ -90,7 +90,7 @@ _asf_read_media_stream(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
{
|
||||
asf_media_stream_t s;
|
||||
avi_audio_format_t wfx;
|
||||
- int len;
|
||||
+ unsigned int len;
|
||||
|
||||
len = sizeof(s) - sizeof(s.Hdr);
|
||||
if(len > size)
|
||||
@@ -121,7 +121,7 @@ static int
|
||||
_asf_read_stream_object(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
{
|
||||
asf_stream_object_t s;
|
||||
- int len;
|
||||
+ unsigned int len;
|
||||
|
||||
len = sizeof(s) - sizeof(asf_object_t);
|
||||
if(size < len)
|
||||
@@ -145,8 +145,8 @@ _asf_read_stream_object(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
static int
|
||||
_asf_read_extended_stream_object(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
{
|
||||
- int i, len;
|
||||
- long off;
|
||||
+ unsigned int i, len;
|
||||
+ size_t off;
|
||||
asf_object_t tmp;
|
||||
asf_extended_stream_object_t xs;
|
||||
asf_stream_name_t nm;
|
||||
@@ -201,7 +201,7 @@ static int
|
||||
_asf_read_header_extension(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
{
|
||||
off_t pos;
|
||||
- long off;
|
||||
+ size_t off;
|
||||
asf_header_extension_t ext;
|
||||
asf_object_t tmp;
|
||||
|
||||
@@ -233,7 +233,7 @@ _asf_read_header_extension(FILE *fp, struct song_metadata *psong, __u32 size)
|
||||
}
|
||||
|
||||
static int
|
||||
-_asf_load_string(FILE *fp, int type, int size, char *buf, int len)
|
||||
+_asf_load_string(FILE *fp, int type, unsigned short size, char *buf, int len)
|
||||
{
|
||||
unsigned char data[2048];
|
||||
__u16 wc;
|
||||
@@ -302,7 +302,7 @@ _asf_load_string(FILE *fp, int type, int size, char *buf, int len)
|
||||
static void *
|
||||
_asf_load_picture(FILE *fp, int size, void *bm, int *bm_size)
|
||||
{
|
||||
- int i;
|
||||
+ unsigned long i;
|
||||
char buf[256];
|
||||
#if 0
|
||||
//
|
||||
diff --git tagutils/tagutils-flc.c tagutils/tagutils-flc.c
|
||||
index b8f41d4..839327f 100644
|
||||
--- tagutils/tagutils-flc.c
|
||||
+++ tagutils/tagutils-flc.c
|
||||
@@ -26,7 +26,7 @@ _get_flctags(char *filename, struct song_metadata *psong)
|
||||
FLAC__Metadata_SimpleIterator *iterator = 0;
|
||||
FLAC__StreamMetadata *block;
|
||||
unsigned int sec, ms;
|
||||
- int i;
|
||||
+ unsigned int i;
|
||||
int err = 0;
|
||||
|
||||
if(!(iterator = FLAC__metadata_simple_iterator_new()))
|
||||
diff --git tagutils/tagutils-mp3.c tagutils/tagutils-mp3.c
|
||||
index 770f231..698f743 100644
|
||||
--- tagutils/tagutils-mp3.c
|
||||
+++ tagutils/tagutils-mp3.c
|
||||
@@ -31,7 +31,7 @@ _get_mp3tags(char *file, struct song_metadata *psong)
|
||||
struct id3_tag *pid3tag;
|
||||
struct id3_frame *pid3frame;
|
||||
int err;
|
||||
- int index;
|
||||
+ unsigned int index;
|
||||
int used;
|
||||
unsigned char *utf8_text;
|
||||
int genre = WINAMP_GENRE_UNKNOWN;
|
||||
@@ -405,7 +405,7 @@ static void _mp3_get_average_bitrate(FILE *infile, struct mp3_frameinfo *pfi, co
|
||||
off_t file_size;
|
||||
unsigned char frame_buffer[2900];
|
||||
unsigned char header[4];
|
||||
- int index = 0;
|
||||
+ unsigned int index = 0;
|
||||
int found = 0;
|
||||
off_t pos;
|
||||
struct mp3_frameinfo fi;
|
||||
@@ -549,11 +549,11 @@ _get_mp3fileinfo(char *file, struct song_metadata *psong)
|
||||
struct id3header *pid3;
|
||||
struct mp3_frameinfo fi;
|
||||
unsigned int size = 0;
|
||||
- unsigned int n_read;
|
||||
+ size_t n_read;
|
||||
off_t fp_size = 0;
|
||||
off_t file_size;
|
||||
unsigned char buffer[1024];
|
||||
- int index;
|
||||
+ unsigned int index;
|
||||
|
||||
int xing_flags;
|
||||
int found;
|
||||
diff --git tagutils/tagutils-wav.c tagutils/tagutils-wav.c
|
||||
index e9f6c20..956eef7 100644
|
||||
--- tagutils/tagutils-wav.c
|
||||
+++ tagutils/tagutils-wav.c
|
||||
@@ -79,7 +79,7 @@ _get_wavtags(char *filename, struct song_metadata *psong)
|
||||
|
||||
/* now, walk through the chunks */
|
||||
current_offset = 12;
|
||||
- while(current_offset + 8 < psong->file_size)
|
||||
+ while(current_offset + 8 < (unsigned int) psong->file_size)
|
||||
{
|
||||
len = 8;
|
||||
if(!(len = read(fd, hdr, len)) || (len != 8))
|
||||
@@ -162,7 +162,7 @@ _get_wavtags(char *filename, struct song_metadata *psong)
|
||||
|
||||
off = 4;
|
||||
p = tags + off;
|
||||
- while(off < len - 8)
|
||||
+ while(off < (int) len - 8)
|
||||
{
|
||||
taglen = GET_WAV_INT32(p + 4);
|
||||
|
||||
diff --git tagutils/tagutils.c tagutils/tagutils.c
|
||||
index 7e147e7..b344552 100644
|
||||
--- tagutils/tagutils.c
|
||||
+++ tagutils/tagutils.c
|
||||
@@ -96,7 +96,7 @@ char *winamp_genre[] = {
|
||||
"Unknown"
|
||||
};
|
||||
|
||||
-#define WINAMP_GENRE_UNKNOWN ((sizeof(winamp_genre) / sizeof(winamp_genre[0])) - 1)
|
||||
+#define WINAMP_GENRE_UNKNOWN ((int)(sizeof(winamp_genre) / sizeof(winamp_genre[0])) - 1)
|
||||
|
||||
|
||||
/*
|
||||
@@ -132,7 +132,7 @@ static taghandler taghandlers[] = {
|
||||
{ "asf", 0, _get_asffileinfo },
|
||||
{ "wav", _get_wavtags, _get_wavfileinfo },
|
||||
{ "pcm", 0, _get_pcmfileinfo },
|
||||
- { NULL, 0 }
|
||||
+ { NULL, NULL, 0 }
|
||||
};
|
||||
|
||||
|
||||
diff --git upnpdescgen.c upnpdescgen.c
|
||||
index c3b94e0..2ce8c31 100644
|
||||
--- upnpdescgen.c
|
||||
+++ upnpdescgen.c
|
||||
@@ -325,32 +325,32 @@ static const struct stateVar ConnectionManagerVars[] =
|
||||
{"SourceProtocolInfo", 1<<7, 0, 0, 44}, /* required */
|
||||
{"SinkProtocolInfo", 1<<7, 0, 0, 48}, /* required */
|
||||
{"CurrentConnectionIDs", 1<<7, 0, 0, 46}, /* required */
|
||||
- {"A_ARG_TYPE_ConnectionStatus", 0, 0, 27}, /* required */
|
||||
- {"A_ARG_TYPE_ConnectionManager", 0, 0}, /* required */
|
||||
- {"A_ARG_TYPE_Direction", 0, 0, 33}, /* required */
|
||||
- {"A_ARG_TYPE_ProtocolInfo", 0, 0}, /* required */
|
||||
- {"A_ARG_TYPE_ConnectionID", 4, 0}, /* required */
|
||||
- {"A_ARG_TYPE_AVTransportID", 4, 0}, /* required */
|
||||
- {"A_ARG_TYPE_RcsID", 4, 0}, /* required */
|
||||
- {0, 0}
|
||||
+ {"A_ARG_TYPE_ConnectionStatus", 0, 0, 27, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_ConnectionManager", 0, 0, 0, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_Direction", 0, 0, 33, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_ProtocolInfo", 0, 0, 0, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_ConnectionID", 4, 0, 0, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_AVTransportID", 4, 0, 0, 0}, /* required */
|
||||
+ {"A_ARG_TYPE_RcsID", 4, 0, 0, 0}, /* required */
|
||||
+ {NULL, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument GetSearchCapabilitiesArgs[] =
|
||||
{
|
||||
{"SearchCaps", 2, 10},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument GetSortCapabilitiesArgs[] =
|
||||
{
|
||||
{"SortCaps", 2, 11},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument GetSystemUpdateIDArgs[] =
|
||||
{
|
||||
{"Id", 2, 12},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument BrowseArgs[] =
|
||||
@@ -365,7 +365,7 @@ static const struct argument BrowseArgs[] =
|
||||
{"NumberReturned", 2, 8},
|
||||
{"TotalMatches", 2, 8},
|
||||
{"UpdateID", 2, 9},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument SearchArgs[] =
|
||||
@@ -380,7 +380,7 @@ static const struct argument SearchArgs[] =
|
||||
{"NumberReturned", 2, 8},
|
||||
{"TotalMatches", 2, 8},
|
||||
{"UpdateID", 2, 9},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0}
|
||||
};
|
||||
|
||||
static const struct action ContentDirectoryActions[] =
|
||||
@@ -407,16 +407,16 @@ static const struct action ContentDirectoryActions[] =
|
||||
static const struct stateVar ContentDirectoryVars[] =
|
||||
{
|
||||
{"TransferIDs", 1<<7, 0, 0, 48}, /* 0 */
|
||||
- {"A_ARG_TYPE_ObjectID", 0, 0},
|
||||
- {"A_ARG_TYPE_Result", 0, 0},
|
||||
- {"A_ARG_TYPE_SearchCriteria", 0, 0},
|
||||
- {"A_ARG_TYPE_BrowseFlag", 0, 0, 36},
|
||||
+ {"A_ARG_TYPE_ObjectID", 0, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_Result", 0, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_SearchCriteria", 0, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_BrowseFlag", 0, 0, 36, 0},
|
||||
/* Allowed Values : BrowseMetadata / BrowseDirectChildren */
|
||||
- {"A_ARG_TYPE_Filter", 0, 0}, /* 5 */
|
||||
- {"A_ARG_TYPE_SortCriteria", 0, 0},
|
||||
- {"A_ARG_TYPE_Index", 3, 0},
|
||||
- {"A_ARG_TYPE_Count", 3, 0},
|
||||
- {"A_ARG_TYPE_UpdateID", 3, 0},
|
||||
+ {"A_ARG_TYPE_Filter", 0, 0, 0, 0}, /* 5 */
|
||||
+ {"A_ARG_TYPE_SortCriteria", 0, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_Index", 3, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_Count", 3, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_UpdateID", 3, 0, 0, 0},
|
||||
//JM{"A_ARG_TYPE_TransferID", 3, 0}, /* 10 */
|
||||
//JM{"A_ARG_TYPE_TransferStatus", 0, 0, 39},
|
||||
/* Allowed Values : COMPLETED / ERROR / IN_PROGRESS / STOPPED */
|
||||
@@ -424,11 +424,11 @@ static const struct stateVar ContentDirectoryVars[] =
|
||||
//JM{"A_ARG_TYPE_TransferTotal", 0, 0},
|
||||
//JM{"A_ARG_TYPE_TagValueList", 0, 0},
|
||||
//JM{"A_ARG_TYPE_URI", 5, 0}, /* 15 */
|
||||
- {"SearchCapabilities", 0, 0},
|
||||
- {"SortCapabilities", 0, 0},
|
||||
+ {"SearchCapabilities", 0, 0, 0, 0},
|
||||
+ {"SortCapabilities", 0, 0, 0, 0},
|
||||
{"SystemUpdateID", 3|0x80, 0, 0, 255},
|
||||
//{"ContainerUpdateIDs", 0, 0},
|
||||
- {0, 0}
|
||||
+ {NULL, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
static const struct argument GetIsAuthorizedArgs[] =
|
||||
@@ -464,15 +464,15 @@ static const struct action X_MS_MediaReceiverRegistrarActions[] =
|
||||
|
||||
static const struct stateVar X_MS_MediaReceiverRegistrarVars[] =
|
||||
{
|
||||
- {"A_ARG_TYPE_DeviceID", 0, 0},
|
||||
- {"A_ARG_TYPE_RegistrationReqMsg", 7, 0},
|
||||
- {"A_ARG_TYPE_RegistrationRespMsg", 7, 0},
|
||||
- {"A_ARG_TYPE_Result", 6, 0},
|
||||
- {"AuthorizationDeniedUpdateID", 3, 0},
|
||||
- {"AuthorizationGrantedUpdateID", 3, 0},
|
||||
- {"ValidationRevokedUpdateID", 3, 0},
|
||||
- {"ValidationSucceededUpdateID", 3, 0},
|
||||
- {0, 0}
|
||||
+ {"A_ARG_TYPE_DeviceID", 0, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_RegistrationReqMsg", 7, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_RegistrationRespMsg", 7, 0, 0, 0},
|
||||
+ {"A_ARG_TYPE_Result", 6, 0, 0, 0},
|
||||
+ {"AuthorizationDeniedUpdateID", 3, 0, 0, 0},
|
||||
+ {"AuthorizationGrantedUpdateID", 3, 0, 0, 0},
|
||||
+ {"ValidationRevokedUpdateID", 3, 0, 0, 0},
|
||||
+ {"ValidationSucceededUpdateID", 3, 0, 0, 0},
|
||||
+ {NULL, 0, 0, 0, 0}
|
||||
};
|
||||
|
||||
/* WANCfg.xml */
|
||||
diff --git upnpevents.c upnpevents.c
|
||||
index 1b5f018..2438bf3 100644
|
||||
--- upnpevents.c
|
||||
+++ upnpevents.c
|
||||
@@ -256,7 +256,7 @@ error:
|
||||
static void
|
||||
upnp_event_notify_connect(struct upnp_event_notify * obj)
|
||||
{
|
||||
- int i;
|
||||
+ unsigned long i;
|
||||
const char * p;
|
||||
unsigned short port;
|
||||
struct sockaddr_in addr;
|
||||
diff --git upnphttp.c upnphttp.c
|
||||
index b368cd9..58f3f2c 100644
|
||||
--- upnphttp.c
|
||||
+++ upnphttp.c
|
||||
@@ -1283,7 +1283,7 @@ SendResp_upnphttp(struct upnphttp * h)
|
||||
}
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
send_data(struct upnphttp * h, char * header, size_t size, int flags)
|
||||
{
|
||||
int n;
|
||||
@@ -1853,7 +1853,7 @@ SendResp_dlnafile(struct upnphttp * h, char * object)
|
||||
char path[PATH_MAX];
|
||||
char mime[32];
|
||||
char dlna[96];
|
||||
- } last_file = { 0, 0 };
|
||||
+ } last_file = { 0, 0, { '\0' }, { '\0' }, { '\0' } };
|
||||
#if USE_FORK
|
||||
pid_t newpid = 0;
|
||||
#endif
|
||||
diff --git upnpsoap.c upnpsoap.c
|
||||
index 3182ca4..ae4ff95 100644
|
||||
--- upnpsoap.c
|
||||
+++ upnpsoap.c
|
||||
@@ -542,7 +542,7 @@ set_filter_flags(char * filter, struct upnphttp *h)
|
||||
return flags;
|
||||
}
|
||||
|
||||
-char *
|
||||
+static char *
|
||||
parse_sort_criteria(char *sortCriteria, int *error)
|
||||
{
|
||||
char *order = NULL;
|
||||
diff --git utils.c utils.c
|
||||
index d8cba4d..36ff168 100644
|
||||
--- utils.c
|
||||
+++ utils.c
|
||||
@@ -19,7 +19,11 @@
|
||||
#include <ctype.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
+#if defined(__FreeBSD__)
|
||||
+#include <limits.h>
|
||||
+#else
|
||||
#include <linux/limits.h>
|
||||
+#endif
|
||||
#include <sys/stat.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/types.h>
|
||||
@@ -30,6 +34,7 @@
|
||||
#include "minidlnatypes.h"
|
||||
#include "upnpglobalvars.h"
|
||||
#include "log.h"
|
||||
+#include "utils.h"
|
||||
|
||||
inline int
|
||||
strcatf(struct string_s *str, const char *fmt, ...)
|
||||
@@ -277,7 +282,7 @@ unsigned int
|
||||
DJBHash(const char *str, int len)
|
||||
{
|
||||
unsigned int hash = 5381;
|
||||
- unsigned int i = 0;
|
||||
+ int i = 0;
|
||||
|
||||
for(i = 0; i < len; str++, i++)
|
||||
{
|
||||
diff --git utils.h utils.h
|
||||
index fbd0a91..b5b433a 100644
|
||||
--- utils.h
|
||||
+++ utils.h
|
||||
@@ -25,7 +25,11 @@
|
||||
#define __UTILS_H__
|
||||
|
||||
int
|
||||
-strcatf(struct string_s *str, char *fmt, ...);
|
||||
+strcatf(struct string_s *str, const char *fmt, ...)
|
||||
+#ifdef __GNUC__
|
||||
+ __attribute__((format(printf, 2, 3)))
|
||||
+#endif
|
||||
+;
|
||||
|
||||
void
|
||||
strncpyt(char *dst, const char *src, size_t len);
|
||||
diff --git uuid.c uuid.c
|
||||
index bdb4abc..bfa22b7 100644
|
||||
--- uuid.c
|
||||
+++ uuid.c
|
||||
@@ -37,6 +37,7 @@
|
||||
|
||||
#include "getifaddr.h"
|
||||
#include "log.h"
|
||||
+#include "uuid.h"
|
||||
|
||||
#define ETH_ALEN 6
|
||||
#define NSEC_PER_SEC 1000000000L
|
||||
@@ -106,7 +107,7 @@ read_random_bytes(unsigned char *buf, size_t size)
|
||||
}
|
||||
}
|
||||
|
||||
-void
|
||||
+static void
|
||||
init_clockseq(void)
|
||||
{
|
||||
unsigned char buf[4];
|
||||
@@ -117,7 +118,7 @@ init_clockseq(void)
|
||||
clock_seq_initialized = 1;
|
||||
}
|
||||
|
||||
-int
|
||||
+static int
|
||||
generate_uuid(unsigned char uuid_out[16])
|
||||
{
|
||||
static u_int64_t last_time_all;
|
||||
|
@ -1,26 +0,0 @@
|
||||
--- scanner.c 17 Nov 2009 19:13:00 -0000 1.53
|
||||
+++ scanner.c 9 Jan 2010 13:19:49 -0000
|
||||
@@ -632,4 +636,4 @@
|
||||
-filter_audio(const struct dirent *d)
|
||||
+filter_audio(struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
((d->d_type == DT_DIR) ||
|
||||
@@ -644,4 +648,4 @@
|
||||
-filter_video(const struct dirent *d)
|
||||
+filter_video(struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
((d->d_type == DT_DIR) ||
|
||||
@@ -656,4 +660,4 @@
|
||||
-filter_images(const struct dirent *d)
|
||||
+filter_images(struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
((d->d_type == DT_DIR) ||
|
||||
@@ -668,4 +672,4 @@
|
||||
-filter_media(const struct dirent *d)
|
||||
+filter_media(struct dirent *d)
|
||||
{
|
||||
return ( (*d->d_name != '.') &&
|
||||
((d->d_type == DT_DIR) ||
|
@ -1,4 +1,16 @@
|
||||
sbin/minidlna
|
||||
sbin/minidlnad
|
||||
@unexec if cmp -s %D/etc/minidlna.conf %D/etc/minidlna.conf.sample; then rm -f %D/etc/minidlna.conf; fi
|
||||
etc/minidlna.conf.sample
|
||||
@exec [ -f %D/etc/minidlna.conf ] || cp -p %D/etc/minidlna.conf.sample %D/etc/minidlna.conf
|
||||
%%NLS%%share/locale/da/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/de/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/es/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/fr/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/it/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/ja/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/nb/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/nl/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/pl/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/ru/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/sl/LC_MESSAGES/minidlna.mo
|
||||
%%NLS%%share/locale/sv/LC_MESSAGES/minidlna.mo
|
||||
|
Loading…
Reference in New Issue
Block a user