Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/azatoth/minidlna.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin Maggard <jmaggard@users.sourceforce.net>2012-02-14 02:48:48 +0400
committerJustin Maggard <jmaggard@users.sourceforce.net>2012-02-14 02:48:48 +0400
commitc3d8b206d33fd54cb5ddb7e11e6b8798959d4544 (patch)
tree0e2cea2689babd87fb7aa45af5dbfbed04e505e5
parent2f72f33b4993673374757d44bdfa2f41199357a7 (diff)
* Miscellaneous minor cleanups for string termination and unfreed memory at exit.
-rw-r--r--minidlna.c55
-rw-r--r--upnpevents.c10
-rw-r--r--upnpevents.h7
3 files changed, 32 insertions, 40 deletions
diff --git a/minidlna.c b/minidlna.c
index 5e3f0a1..9e3feb8 100644
--- a/minidlna.c
+++ b/minidlna.c
@@ -211,8 +211,7 @@ getfriendlyname(char * buf, int len)
if( gethostname(hn, 256) == 0 )
{
- strncpy(buf, hn, len-1);
- buf[len] = '\0';
+ strncpyt(buf, hn, len);
dot = strchr(buf, '.');
if( dot )
*dot = '\0';
@@ -242,8 +241,7 @@ getfriendlyname(char * buf, int len)
key = strchr(val, ' ');
if( key )
{
- strncpy(modelnumber, key+1, MODELNUMBER_MAX_LEN);
- modelnumber[MODELNUMBER_MAX_LEN-1] = '\0';
+ strncpyt(modelnumber, key+1, MODELNUMBER_MAX_LEN);
*key = '\0';
}
snprintf(modelname, MODELNAME_MAX_LEN,
@@ -251,8 +249,7 @@ getfriendlyname(char * buf, int len)
}
else if( strcmp(key, "serial") == 0 )
{
- strncpy(serialnumber, val, SERIALNUMBER_MAX_LEN);
- serialnumber[SERIALNUMBER_MAX_LEN-1] = '\0';
+ strncpyt(serialnumber, val, SERIALNUMBER_MAX_LEN);
if( serialnumber[0] == '\0' )
{
char mac_str[13];
@@ -344,8 +341,7 @@ init(int argc, char * * argv)
int verbose_flag = 0;
int options_flag = 0;
struct sigaction sa;
- /*const char * logfilename = 0;*/
- const char * presurl = 0;
+ const char * presurl = NULL;
const char * optionsfile = "/etc/minidlna.conf";
char mac_str[13];
char * string, * word;
@@ -437,20 +433,16 @@ init(int argc, char * * argv)
runtime_vars.notify_interval = atoi(ary_options[i].value);
break;
case UPNPSERIAL:
- strncpy(serialnumber, ary_options[i].value, SERIALNUMBER_MAX_LEN);
- serialnumber[SERIALNUMBER_MAX_LEN-1] = '\0';
+ strncpyt(serialnumber, ary_options[i].value, SERIALNUMBER_MAX_LEN);
break;
case UPNPMODEL_NAME:
- strncpy(modelname, ary_options[i].value, MODELNAME_MAX_LEN);
- modelname[MODELNAME_MAX_LEN-1] = '\0';
+ strncpyt(modelname, ary_options[i].value, MODELNAME_MAX_LEN);
break;
case UPNPMODEL_NUMBER:
- strncpy(modelnumber, ary_options[i].value, MODELNUMBER_MAX_LEN);
- modelnumber[MODELNUMBER_MAX_LEN-1] = '\0';
+ strncpyt(modelnumber, ary_options[i].value, MODELNUMBER_MAX_LEN);
break;
case UPNPFRIENDLYNAME:
- strncpy(friendly_name, ary_options[i].value, FRIENDLYNAME_MAX_LEN);
- friendly_name[FRIENDLYNAME_MAX_LEN-1] = '\0';
+ strncpyt(friendly_name, ary_options[i].value, FRIENDLYNAME_MAX_LEN);
break;
case UPNPMEDIADIR:
type = ALL_MEDIA;
@@ -535,7 +527,7 @@ init(int argc, char * * argv)
DPRINTF(E_FATAL, L_GENERAL, "Database path not accessible! [%s]\n", path);
break;
}
- strncpy(db_path, path, PATH_MAX);
+ strncpyt(db_path, path, PATH_MAX);
break;
case UPNPLOGDIR:
path = realpath(ary_options[i].value, buf);
@@ -547,7 +539,7 @@ init(int argc, char * * argv)
DPRINTF(E_FATAL, L_GENERAL, "Log path not accessible! [%s]\n", path);
break;
}
- strncpy(log_path, path, PATH_MAX);
+ strncpyt(log_path, path, PATH_MAX);
break;
case UPNPINOTIFY:
if( (strcmp(ary_options[i].value, "yes") != 0) && !atoi(ary_options[i].value) )
@@ -601,12 +593,12 @@ init(int argc, char * * argv)
if( log_path[0] == '\0' )
{
if( db_path[0] == '\0' )
- strncpy(log_path, DEFAULT_LOG_PATH, PATH_MAX);
+ strncpyt(log_path, DEFAULT_LOG_PATH, PATH_MAX);
else
- strncpy(log_path, db_path, PATH_MAX);
+ strncpyt(log_path, db_path, PATH_MAX);
}
if( db_path[0] == '\0' )
- strncpy(db_path, DEFAULT_DB_PATH, PATH_MAX);
+ strncpyt(db_path, DEFAULT_DB_PATH, PATH_MAX);
/* command line arguments processing */
for(i=1; i<argc; i++)
@@ -630,21 +622,16 @@ init(int argc, char * * argv)
break;
case 's':
if(i+1 < argc)
- strncpy(serialnumber, argv[++i], SERIALNUMBER_MAX_LEN);
+ strncpyt(serialnumber, argv[++i], SERIALNUMBER_MAX_LEN);
else
DPRINTF(E_ERROR, L_GENERAL, "Option -%c takes one argument.\n", argv[i][1]);
- serialnumber[SERIALNUMBER_MAX_LEN-1] = '\0';
break;
case 'm':
if(i+1 < argc)
- strncpy(modelnumber, argv[++i], MODELNUMBER_MAX_LEN);
+ strncpyt(modelnumber, argv[++i], MODELNUMBER_MAX_LEN);
else
DPRINTF(E_ERROR, L_GENERAL, "Option -%c takes one argument.\n", argv[i][1]);
- modelnumber[MODELNUMBER_MAX_LEN-1] = '\0';
break;
- /*case 'l':
- logfilename = argv[++i];
- break;*/
case 'p':
if(i+1 < argc)
runtime_vars.port = atoi(argv[++i]);
@@ -819,15 +806,9 @@ init(int argc, char * * argv)
/* presentation url */
if(presurl)
- {
- strncpy(presentationurl, presurl, PRESENTATIONURL_MAX_LEN);
- presentationurl[PRESENTATIONURL_MAX_LEN-1] = '\0';
- }
+ strncpyt(presentationurl, presurl, PRESENTATIONURL_MAX_LEN);
else
- {
- snprintf(presentationurl, PRESENTATIONURL_MAX_LEN,
- "http://%s:%d/", lan_addr[0].str, runtime_vars.port);
- }
+ strcpy(presentationurl, "/");
/* set signal handler */
memset(&sa, 0, sizeof(struct sigaction));
@@ -1270,6 +1251,8 @@ shutdown:
sql_exec(db, "UPDATE SETTINGS set UPDATE_ID = %u", updateID);
sqlite3_close(db);
+ upnpevents_removeSubscribers();
+
media_path = media_dirs;
art_names = album_art_names;
while( media_path )
diff --git a/upnpevents.c b/upnpevents.c
index 6ce931b..85be96c 100644
--- a/upnpevents.c
+++ b/upnpevents.c
@@ -194,6 +194,16 @@ upnpevents_removeSubscriber(const char * sid, int sidlen)
return -1;
}
+void
+upnpevents_removeSubscribers(void)
+{
+ struct subscriber * sub;
+
+ for(sub = subscriberlist.lh_first; sub != NULL; sub = subscriberlist.lh_first) {
+ upnpevents_removeSubscriber(sub->uuid, sizeof(sub->uuid));
+ }
+}
+
/* notifies all subscribers of a SystemUpdateID change */
void
upnp_event_var_change_notify(enum subscriber_service_enum service)
diff --git a/upnpevents.h b/upnpevents.h
index c9748af..5dcd0d9 100644
--- a/upnpevents.h
+++ b/upnpevents.h
@@ -61,11 +61,10 @@ upnpevents_addSubscriber(const char * eventurl,
const char * callback, int callbacklen,
int timeout);
-int
-upnpevents_removeSubscriber(const char * sid, int sidlen);
+int upnpevents_removeSubscriber(const char * sid, int sidlen);
+void upnpevents_removeSubscribers(void);
-int
-renewSubscription(const char * sid, int sidlen, int timeout);
+int renewSubscription(const char * sid, int sidlen, int timeout);
void upnpevents_selectfds(fd_set *readset, fd_set *writeset, int * max_fd);
void upnpevents_processfds(fd_set *readset, fd_set *writeset);