From 171a7752a8fab0e1c55be1469a331ef20a7b3755 Mon Sep 17 00:00:00 2001 From: Warren Dukes Date: Sun, 11 Apr 2004 00:52:05 +0000 Subject: add --only-create-db option from msells have SIGHUP cause rereading db file git-svn-id: https://svn.musicpd.org/mpd/trunk@663 09075e82-0dd4-0310-85a5-a0d7c8717e4f --- src/directory.c | 2 +- src/list.c | 3 +++ src/main.c | 13 +++++++++++-- src/player.c | 1 + src/sig_handlers.c | 11 ++++++++++- src/song.c | 2 +- 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/src/directory.c b/src/directory.c index 4ef4af10b..dd0f49b54 100644 --- a/src/directory.c +++ b/src/directory.c @@ -473,7 +473,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) { nextDirNode = nodeTemp; } - if(!nextDirNode) { + if(NULL==nextDirNode) { subDirectory = newDirectory(directory,name, mtime); insertInList(directory->subDirectories,key, diff --git a/src/list.c b/src/list.c index d14f5b874..b6322052b 100644 --- a/src/list.c +++ b/src/list.c @@ -88,6 +88,9 @@ int insertInListBeforeNode(List * list, ListNode * beforeNode, char * key, } else { node->prevNode = beforeNode->prevNode; + if(node->prevNode) { + node->prevNode->nextNode = node; + } beforeNode->prevNode = node; } diff --git a/src/main.c b/src/main.c index cac40b68f..0f706a426 100644 --- a/src/main.c +++ b/src/main.c @@ -58,6 +58,7 @@ typedef struct _Options { char * dbFile; int daemon; int createDB; + int onlyCreateDB; } Options; void usage(char * argv[]) { @@ -72,6 +73,7 @@ void usage(char * argv[]) { ERROR(" --help this usage statement\n"); ERROR(" --no-daemon don't detach from console\n"); ERROR(" --create-db force (re)creation database\n"); + ERROR(" --only-create-db create database and exit\n"); ERROR(" --no-create-db don't create database\n"); ERROR(" --verbose verbose logging\n"); ERROR(" --version prints version information\n"); @@ -91,6 +93,7 @@ void parseOptions(int argc, char ** argv, Options * options) { options->usr = NULL; options->daemon = 1; options->createDB = 0; + options->onlyCreateDB = 0; options->dbFile = NULL; if(argc>1) { @@ -109,6 +112,10 @@ void parseOptions(int argc, char ** argv, Options * options) { options->createDB = 1; argcLeft--; } + else if(strcmp(argv[i],"--only-create-db")==0) { + options->onlyCreateDB = 1; + argcLeft--; + } else if(strcmp(argv[i],"--no-create-db")==0) { options->createDB = -1; argcLeft--; @@ -210,7 +217,7 @@ int main(int argc, char * argv[]) { return EXIT_FAILURE; } - if((listenSocket = establish(port))<0) { + if(!options.onlyCreateDB && (listenSocket = establish(port))<0) { ERROR("error binding port\n"); return EXIT_FAILURE; } @@ -340,7 +347,8 @@ int main(int argc, char * argv[]) { strncpy(directorydb,options.dbFile,MAXPATHLEN); directorydb[MAXPATHLEN] = '\0'; } - if(options.createDB>0 || readDirectoryDB()<0) { + if(options.createDB>0 || options.onlyCreateDB || readDirectoryDB()<0) + { if(options.createDB<0) { ERROR("can't open db file and using \"--no-create-db\"" " command line option\n"); @@ -351,6 +359,7 @@ int main(int argc, char * argv[]) { ERROR("problem opening db for reading or writing\n"); exit(EXIT_FAILURE); } + if(options.onlyCreateDB) exit(EXIT_SUCCESS); } initCommands(); diff --git a/src/player.c b/src/player.c index e74abaa3d..4efe55679 100644 --- a/src/player.c +++ b/src/player.c @@ -103,6 +103,7 @@ int playerInit() { sa.sa_handler = SIG_IGN; sigaction(SIGPIPE,&sa,NULL); + sigaction(SIGHUP,&sa,NULL); sa.sa_handler = decodeSigHandler; sigaction(SIGCHLD,&sa,NULL); sigaction(SIGTERM,&sa,NULL); diff --git a/src/sig_handlers.c b/src/sig_handlers.c index 4baf060f0..55296daf6 100644 --- a/src/sig_handlers.c +++ b/src/sig_handlers.c @@ -19,10 +19,12 @@ #include "sig_handlers.h" #include "player.h" #include "playlist.h" +#include "directory.h" #include struct sigaction original_termSa; +struct sigaction original_hupSa; void termSigHandler(int signal) { if(signal==SIGTERM) { @@ -35,6 +37,10 @@ void termSigHandler(int signal) { void usr1SigHandler(int signal) { } +void hupSigHandler(int signal) { + readDirectoryDB(); +} + void initSigHandlers() { struct sigaction sa; @@ -46,12 +52,15 @@ void initSigHandlers() { sigaction(SIGUSR1,&sa,NULL); sa.sa_handler = player_sigHandler; sigaction(SIGCHLD,&sa,NULL); + sa.sa_handler = hupSigHandler; + sigaction(SIGHUP,&sa,&original_hupSa); sa.sa_handler = termSigHandler; - sigaddset(&sa.sa_mask,SIGTERM); + /*sigaddset(&sa.sa_mask,SIGTERM);*/ sigaction(SIGTERM,&sa,&original_termSa); } void finishSigHandlers() { + sigaction(SIGHUP,&original_termSa,NULL); sigaction(SIGTERM,&original_termSa,NULL); } diff --git a/src/song.c b/src/song.c index 7cf327080..d9b28284c 100644 --- a/src/song.c +++ b/src/song.c @@ -191,9 +191,9 @@ void insertSongIntoList(SongList * list, ListNode ** nextSongNode, char * key, tempSong->tag = song->tag; tempSong->mtime = song->mtime; song->tag = NULL; - freeJustSong(song); addSongToTables(tempSong); } + freeJustSong(song); *nextSongNode = (*nextSongNode)->nextNode; } else { -- cgit v1.2.3