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
This commit is contained in:
parent
8c4bc2d2d4
commit
171a7752a8
|
@ -473,7 +473,7 @@ void readDirectoryInfo(FILE * fp,Directory * directory) {
|
||||||
nextDirNode = nodeTemp;
|
nextDirNode = nodeTemp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!nextDirNode) {
|
if(NULL==nextDirNode) {
|
||||||
subDirectory = newDirectory(directory,name,
|
subDirectory = newDirectory(directory,name,
|
||||||
mtime);
|
mtime);
|
||||||
insertInList(directory->subDirectories,key,
|
insertInList(directory->subDirectories,key,
|
||||||
|
|
|
@ -88,6 +88,9 @@ int insertInListBeforeNode(List * list, ListNode * beforeNode, char * key,
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
node->prevNode = beforeNode->prevNode;
|
node->prevNode = beforeNode->prevNode;
|
||||||
|
if(node->prevNode) {
|
||||||
|
node->prevNode->nextNode = node;
|
||||||
|
}
|
||||||
beforeNode->prevNode = node;
|
beforeNode->prevNode = node;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
13
src/main.c
13
src/main.c
|
@ -58,6 +58,7 @@ typedef struct _Options {
|
||||||
char * dbFile;
|
char * dbFile;
|
||||||
int daemon;
|
int daemon;
|
||||||
int createDB;
|
int createDB;
|
||||||
|
int onlyCreateDB;
|
||||||
} Options;
|
} Options;
|
||||||
|
|
||||||
void usage(char * argv[]) {
|
void usage(char * argv[]) {
|
||||||
|
@ -72,6 +73,7 @@ void usage(char * argv[]) {
|
||||||
ERROR(" --help this usage statement\n");
|
ERROR(" --help this usage statement\n");
|
||||||
ERROR(" --no-daemon don't detach from console\n");
|
ERROR(" --no-daemon don't detach from console\n");
|
||||||
ERROR(" --create-db force (re)creation database\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(" --no-create-db don't create database\n");
|
||||||
ERROR(" --verbose verbose logging\n");
|
ERROR(" --verbose verbose logging\n");
|
||||||
ERROR(" --version prints version information\n");
|
ERROR(" --version prints version information\n");
|
||||||
|
@ -91,6 +93,7 @@ void parseOptions(int argc, char ** argv, Options * options) {
|
||||||
options->usr = NULL;
|
options->usr = NULL;
|
||||||
options->daemon = 1;
|
options->daemon = 1;
|
||||||
options->createDB = 0;
|
options->createDB = 0;
|
||||||
|
options->onlyCreateDB = 0;
|
||||||
options->dbFile = NULL;
|
options->dbFile = NULL;
|
||||||
|
|
||||||
if(argc>1) {
|
if(argc>1) {
|
||||||
|
@ -109,6 +112,10 @@ void parseOptions(int argc, char ** argv, Options * options) {
|
||||||
options->createDB = 1;
|
options->createDB = 1;
|
||||||
argcLeft--;
|
argcLeft--;
|
||||||
}
|
}
|
||||||
|
else if(strcmp(argv[i],"--only-create-db")==0) {
|
||||||
|
options->onlyCreateDB = 1;
|
||||||
|
argcLeft--;
|
||||||
|
}
|
||||||
else if(strcmp(argv[i],"--no-create-db")==0) {
|
else if(strcmp(argv[i],"--no-create-db")==0) {
|
||||||
options->createDB = -1;
|
options->createDB = -1;
|
||||||
argcLeft--;
|
argcLeft--;
|
||||||
|
@ -210,7 +217,7 @@ int main(int argc, char * argv[]) {
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if((listenSocket = establish(port))<0) {
|
if(!options.onlyCreateDB && (listenSocket = establish(port))<0) {
|
||||||
ERROR("error binding port\n");
|
ERROR("error binding port\n");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
@ -340,7 +347,8 @@ int main(int argc, char * argv[]) {
|
||||||
strncpy(directorydb,options.dbFile,MAXPATHLEN);
|
strncpy(directorydb,options.dbFile,MAXPATHLEN);
|
||||||
directorydb[MAXPATHLEN] = '\0';
|
directorydb[MAXPATHLEN] = '\0';
|
||||||
}
|
}
|
||||||
if(options.createDB>0 || readDirectoryDB()<0) {
|
if(options.createDB>0 || options.onlyCreateDB || readDirectoryDB()<0)
|
||||||
|
{
|
||||||
if(options.createDB<0) {
|
if(options.createDB<0) {
|
||||||
ERROR("can't open db file and using \"--no-create-db\""
|
ERROR("can't open db file and using \"--no-create-db\""
|
||||||
" command line option\n");
|
" command line option\n");
|
||||||
|
@ -351,6 +359,7 @@ int main(int argc, char * argv[]) {
|
||||||
ERROR("problem opening db for reading or writing\n");
|
ERROR("problem opening db for reading or writing\n");
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
if(options.onlyCreateDB) exit(EXIT_SUCCESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
initCommands();
|
initCommands();
|
||||||
|
|
|
@ -103,6 +103,7 @@ int playerInit() {
|
||||||
|
|
||||||
sa.sa_handler = SIG_IGN;
|
sa.sa_handler = SIG_IGN;
|
||||||
sigaction(SIGPIPE,&sa,NULL);
|
sigaction(SIGPIPE,&sa,NULL);
|
||||||
|
sigaction(SIGHUP,&sa,NULL);
|
||||||
sa.sa_handler = decodeSigHandler;
|
sa.sa_handler = decodeSigHandler;
|
||||||
sigaction(SIGCHLD,&sa,NULL);
|
sigaction(SIGCHLD,&sa,NULL);
|
||||||
sigaction(SIGTERM,&sa,NULL);
|
sigaction(SIGTERM,&sa,NULL);
|
||||||
|
|
|
@ -19,10 +19,12 @@
|
||||||
#include "sig_handlers.h"
|
#include "sig_handlers.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "playlist.h"
|
#include "playlist.h"
|
||||||
|
#include "directory.h"
|
||||||
|
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
|
||||||
struct sigaction original_termSa;
|
struct sigaction original_termSa;
|
||||||
|
struct sigaction original_hupSa;
|
||||||
|
|
||||||
void termSigHandler(int signal) {
|
void termSigHandler(int signal) {
|
||||||
if(signal==SIGTERM) {
|
if(signal==SIGTERM) {
|
||||||
|
@ -35,6 +37,10 @@ void termSigHandler(int signal) {
|
||||||
void usr1SigHandler(int signal) {
|
void usr1SigHandler(int signal) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void hupSigHandler(int signal) {
|
||||||
|
readDirectoryDB();
|
||||||
|
}
|
||||||
|
|
||||||
void initSigHandlers() {
|
void initSigHandlers() {
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
|
|
||||||
|
@ -46,12 +52,15 @@ void initSigHandlers() {
|
||||||
sigaction(SIGUSR1,&sa,NULL);
|
sigaction(SIGUSR1,&sa,NULL);
|
||||||
sa.sa_handler = player_sigHandler;
|
sa.sa_handler = player_sigHandler;
|
||||||
sigaction(SIGCHLD,&sa,NULL);
|
sigaction(SIGCHLD,&sa,NULL);
|
||||||
|
sa.sa_handler = hupSigHandler;
|
||||||
|
sigaction(SIGHUP,&sa,&original_hupSa);
|
||||||
sa.sa_handler = termSigHandler;
|
sa.sa_handler = termSigHandler;
|
||||||
sigaddset(&sa.sa_mask,SIGTERM);
|
/*sigaddset(&sa.sa_mask,SIGTERM);*/
|
||||||
sigaction(SIGTERM,&sa,&original_termSa);
|
sigaction(SIGTERM,&sa,&original_termSa);
|
||||||
}
|
}
|
||||||
|
|
||||||
void finishSigHandlers() {
|
void finishSigHandlers() {
|
||||||
|
sigaction(SIGHUP,&original_termSa,NULL);
|
||||||
sigaction(SIGTERM,&original_termSa,NULL);
|
sigaction(SIGTERM,&original_termSa,NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -191,9 +191,9 @@ void insertSongIntoList(SongList * list, ListNode ** nextSongNode, char * key,
|
||||||
tempSong->tag = song->tag;
|
tempSong->tag = song->tag;
|
||||||
tempSong->mtime = song->mtime;
|
tempSong->mtime = song->mtime;
|
||||||
song->tag = NULL;
|
song->tag = NULL;
|
||||||
freeJustSong(song);
|
|
||||||
addSongToTables(tempSong);
|
addSongToTables(tempSong);
|
||||||
}
|
}
|
||||||
|
freeJustSong(song);
|
||||||
*nextSongNode = (*nextSongNode)->nextNode;
|
*nextSongNode = (*nextSongNode)->nextNode;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|
Loading…
Reference in New Issue