From 786bb8cc33e4a9dc20cb7f1eb50beff6cddc5590 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sat, 27 Dec 2008 19:03:33 +0100 Subject: [PATCH] moved command line parser to cmdline.c --- src/Makefile.am | 2 + src/cmdline.c | 165 ++++++++++++++++++++++++++++++++++++++++++++++++ src/cmdline.h | 32 ++++++++++ src/main.c | 138 +--------------------------------------- 4 files changed, 200 insertions(+), 137 deletions(-) create mode 100644 src/cmdline.c create mode 100644 src/cmdline.h diff --git a/src/Makefile.am b/src/Makefile.am index b327a8f93..4c1a58cc4 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -16,6 +16,7 @@ mpd_headers = \ command.h \ idle.h \ condition.h \ + cmdline.h \ conf.h \ crossfade.h \ dbUtils.h \ @@ -102,6 +103,7 @@ mpd_SOURCES = \ command.c \ idle.c \ condition.c \ + cmdline.c \ conf.c \ crossfade.c \ dbUtils.c \ diff --git a/src/cmdline.c b/src/cmdline.c new file mode 100644 index 000000000..418274636 --- /dev/null +++ b/src/cmdline.c @@ -0,0 +1,165 @@ +/* + * Copyright (C) 2003-2008 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "cmdline.h" +#include "path.h" +#include "conf.h" +#include "decoder_list.h" +#include "config.h" +#include "audioOutput.h" + +#ifdef ENABLE_ARCHIVE +#include "archive_list.h" +#endif + +#include + +#include +#include +#include +#include +#include +#include + +#define SYSTEM_CONFIG_FILE_LOCATION "/etc/mpd.conf" +#define USER_CONFIG_FILE_LOCATION "/.mpdconf" + +static void usage(char *argv[]) +{ + printf("usage:\n" + " %s [options] \n" + " %s [options] (searches for ~" USER_CONFIG_FILE_LOCATION + " then " SYSTEM_CONFIG_FILE_LOCATION ")\n", + argv[0], argv[0]); + puts("\n" + "options:\n" + " --help this usage statement\n" + " --kill kill the currently running mpd session\n" + " --create-db force (re)creation of database and exit\n" + " --no-create-db don't create database, even if it doesn't exist\n" + " --no-daemon don't detach from console\n" + " --stdout print messages to stdout and stderr\n" + " --verbose verbose logging\n" + " --version prints version information\n"); +} + +static void version(void) +{ + puts(PACKAGE " (MPD: Music Player Daemon) " VERSION " \n" + "\n" + "Copyright (C) 2003-2007 Warren Dukes \n" + "Copyright (C) 2008 Max Kellermann \n" + "This is free software; see the source for copying conditions. There is NO\n" + "warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" + "\n" + "Supported formats:\n"); + + decoder_plugin_init_all(); + decoder_plugin_print_all_suffixes(stdout); + + puts("\n" + "Supported outputs:\n"); + printAllOutputPluginTypes(stdout); + +#ifdef ENABLE_ARCHIVE + puts("\n" + "Supported archives:\n"); + archive_plugin_init_all(); + archive_plugin_print_all_suffixes(stdout); +#endif +} + +void parseOptions(int argc, char **argv, Options *options) +{ + int argcLeft = argc; + + options->verbose = 0; + options->daemon = 1; + options->stdOutput = 0; + options->createDB = 0; + options->kill = 0; + + if (argc > 1) { + int i = 1; + while (i < argc) { + if (g_str_has_prefix(argv[i], "--")) { + if (strcmp(argv[i], "--help") == 0) { + usage(argv); + exit(EXIT_SUCCESS); + } else if (strcmp(argv[i], "--kill") == 0) { + options->kill++; + argcLeft--; + } else if (strcmp(argv[i], "--no-daemon") == 0) { + options->daemon = 0; + argcLeft--; + } else if (strcmp(argv[i], "--stdout") == 0) { + options->stdOutput = 1; + argcLeft--; + } else if (strcmp(argv[i], "--create-db") == 0) { + options->stdOutput = 1; + options->createDB = 1; + argcLeft--; + } else if (strcmp(argv[i], "--no-create-db") == + 0) { + options->createDB = -1; + argcLeft--; + } else if (strcmp(argv[i], "--verbose") == 0) { + options->verbose = 1; + argcLeft--; + } else if (strcmp(argv[i], "--version") == 0) { + version(); + exit(EXIT_SUCCESS); + } else { + fprintf(stderr, + "unknown command line option: %s\n", + argv[i]); + exit(EXIT_FAILURE); + } + } else + break; + i++; + } + } + + if (argcLeft <= 2) { + if (argcLeft == 2) { + readConf(argv[argc - 1]); + return; + } else if (argcLeft == 1) { + struct stat st; + char *homedir = getenv("HOME"); + char userfile[MPD_PATH_MAX] = ""; + if (homedir && (strlen(homedir) + + strlen(USER_CONFIG_FILE_LOCATION)) < + MPD_PATH_MAX) { + strcpy(userfile, homedir); + strcat(userfile, USER_CONFIG_FILE_LOCATION); + } + if (strlen(userfile) && (0 == stat(userfile, &st))) { + readConf(userfile); + return; + } else if (0 == stat(SYSTEM_CONFIG_FILE_LOCATION, &st)) { + readConf(SYSTEM_CONFIG_FILE_LOCATION); + return; + } + } + } + + usage(argv); + exit(EXIT_FAILURE); +} diff --git a/src/cmdline.h b/src/cmdline.h new file mode 100644 index 000000000..22b24901b --- /dev/null +++ b/src/cmdline.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2003-2008 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef CMDLINE_H +#define CMDLINE_H + +typedef struct _Options { + int kill; + int daemon; + int stdOutput; + int createDB; + int verbose; +} Options; + +void parseOptions(int argc, char **argv, Options *options); + +#endif diff --git a/src/main.c b/src/main.c index 79c9dfa08..564241577 100644 --- a/src/main.c +++ b/src/main.c @@ -24,6 +24,7 @@ #include "update.h" #include "player_thread.h" #include "listen.h" +#include "cmdline.h" #include "conf.h" #include "path.h" #include "mapper.h" @@ -40,7 +41,6 @@ #include "permission.h" #include "replay_gain.h" #include "decoder_list.h" -#include "audioOutput.h" #include "input_stream.h" #include "state_file.h" #include "tag.h" @@ -61,17 +61,6 @@ #include #endif -#define SYSTEM_CONFIG_FILE_LOCATION "/etc/mpd.conf" -#define USER_CONFIG_FILE_LOCATION "/.mpdconf" - -typedef struct _Options { - int kill; - int daemon; - int stdOutput; - int createDB; - int verbose; -} Options; - /* * from git-1.3.0, needed for solaris */ @@ -113,131 +102,6 @@ static int setenv(const char *name, const char *value, int replace) } #endif /* HAVE_SETENV */ -static void usage(char *argv[]) -{ - printf("usage:\n" - " %s [options] \n" - " %s [options] (searches for ~" USER_CONFIG_FILE_LOCATION - " then " SYSTEM_CONFIG_FILE_LOCATION ")\n", - argv[0], argv[0]); - puts("\n" - "options:\n" - " --help this usage statement\n" - " --kill kill the currently running mpd session\n" - " --create-db force (re)creation of database and exit\n" - " --no-create-db don't create database, even if it doesn't exist\n" - " --no-daemon don't detach from console\n" - " --stdout print messages to stdout and stderr\n" - " --verbose verbose logging\n" - " --version prints version information\n"); -} - -static void version(void) -{ - puts(PACKAGE " (MPD: Music Player Daemon) " VERSION " \n" - "\n" - "Copyright (C) 2003-2007 Warren Dukes \n" - "Copyright (C) 2008 Max Kellermann \n" - "This is free software; see the source for copying conditions. There is NO\n" - "warranty; not even MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n" - "\n" - "Supported formats:\n"); - - decoder_plugin_init_all(); - decoder_plugin_print_all_suffixes(stdout); - - puts("\n" - "Supported outputs:\n"); - printAllOutputPluginTypes(stdout); - -#ifdef ENABLE_ARCHIVE - puts("\n" - "Supported archives:\n"); - archive_plugin_init_all(); - archive_plugin_print_all_suffixes(stdout); -#endif -} - -static void parseOptions(int argc, char **argv, Options * options) -{ - int argcLeft = argc; - - options->verbose = 0; - options->daemon = 1; - options->stdOutput = 0; - options->createDB = 0; - options->kill = 0; - - if (argc > 1) { - int i = 1; - while (i < argc) { - if (g_str_has_prefix(argv[i], "--")) { - if (strcmp(argv[i], "--help") == 0) { - usage(argv); - exit(EXIT_SUCCESS); - } else if (strcmp(argv[i], "--kill") == 0) { - options->kill++; - argcLeft--; - } else if (strcmp(argv[i], "--no-daemon") == 0) { - options->daemon = 0; - argcLeft--; - } else if (strcmp(argv[i], "--stdout") == 0) { - options->stdOutput = 1; - argcLeft--; - } else if (strcmp(argv[i], "--create-db") == 0) { - options->stdOutput = 1; - options->createDB = 1; - argcLeft--; - } else if (strcmp(argv[i], "--no-create-db") == - 0) { - options->createDB = -1; - argcLeft--; - } else if (strcmp(argv[i], "--verbose") == 0) { - options->verbose = 1; - argcLeft--; - } else if (strcmp(argv[i], "--version") == 0) { - version(); - exit(EXIT_SUCCESS); - } else { - fprintf(stderr, - "unknown command line option: %s\n", - argv[i]); - exit(EXIT_FAILURE); - } - } else - break; - i++; - } - } - - if (argcLeft <= 2) { - if (argcLeft == 2) { - readConf(argv[argc - 1]); - return; - } else if (argcLeft == 1) { - struct stat st; - char *homedir = getenv("HOME"); - char userfile[MPD_PATH_MAX] = ""; - if (homedir && (strlen(homedir) + - strlen(USER_CONFIG_FILE_LOCATION)) < - MPD_PATH_MAX) { - strcpy(userfile, homedir); - strcat(userfile, USER_CONFIG_FILE_LOCATION); - } - if (strlen(userfile) && (0 == stat(userfile, &st))) { - readConf(userfile); - return; - } else if (0 == stat(SYSTEM_CONFIG_FILE_LOCATION, &st)) { - readConf(SYSTEM_CONFIG_FILE_LOCATION); - return; - } - } - } - - usage(argv); - exit(EXIT_FAILURE); -} - static void changeToUser(void) { ConfigParam *param = getConfigParam(CONF_USER);