command context: fix errors when running certain commands on startup
[fw/openocd] / src / helper / options.c
index 05587c8ce4efbcbbf92457a1fb1d7dd133f7a38c..3a95df46d0799923f12af0f3b7c165eaf0c24f4b 100644 (file)
 #endif
 
 #include "configuration.h"
-#include "log.h"
 // @todo the inclusion of server.h here is a layering violation
-#include "server.h"
+#include <server/server.h>
 
 #include <getopt.h>
 
 static int help_flag, version_flag;
 
-static struct option long_options[] =
+static const struct option long_options[] =
 {
        {"help",        no_argument,            &help_flag,     1},
        {"version",     no_argument,            &version_flag,  1},
        {"debug",       optional_argument,      0,              'd'},
-       {"file",        required_argument,      0,              'f'},
+       {"file",        required_argument,      0,              'f'},
        {"search",      required_argument,      0,              's'},
        {"log_output",  required_argument,      0,      'l'},
        {"command",     required_argument,      0,              'c'},
@@ -46,14 +45,14 @@ static struct option long_options[] =
        {0, 0, 0, 0}
 };
 
-int configuration_output_handler(struct command_context_s *context, const char* line)
+int configuration_output_handler(struct command_context *context, const char* line)
 {
        LOG_USER_N("%s", line);
 
        return ERROR_OK;
 }
 
-int add_default_dirs(void)
+static void add_default_dirs(void)
 {
 #ifdef _WIN32
        /* Add the parent of the directory where openocd.exe resides to the
@@ -75,21 +74,21 @@ int add_default_dirs(void)
                add_script_search_dir(strExePath);
        }
        /*
-        * Add support for the default (as of 20080121) layout when
-        * using autotools and cygwin to build native MinGW binary.
+        * Add support for the default (as of 20091118) layout when
+        * using autotools and cygwin/MinGW to build native binary.
         * Path separator is converted to UNIX style so that MinGW is
         * pleased.
         *
         * bin/openocd.exe
-        * lib/openocd/event/at91eb40a_reset.cfg
-        * lib/openocd/target/at91eb40a.cfg
+        * share/openocd/scripts/interface/dummy.cfg
+        * share/openocd/scripts/target/at91eb40a.cfg
         */
        {
                char strExePath [MAX_PATH];
                char *p;
                GetModuleFileName (NULL, strExePath, MAX_PATH);
                *strrchr(strExePath, '\\') = 0;
-               strcat(strExePath, "/../lib/"PACKAGE);
+               strcat(strExePath, "/../share/"PACKAGE"/scripts");
                for (p = strExePath; *p; p++) {
                        if (*p == '\\')
                                *p = '/';
@@ -102,14 +101,28 @@ int add_default_dirs(void)
         * listed last in the built-in search order, so the user can
         * override these scripts with site-specific customizations.
         */
-       /// @todo Implement @c add_script_search_dir("${HOME}/.openocd").
+
+       const char *home = getenv("HOME");
+
+       if (home) 
+       {
+               char *path;
+
+               path = alloc_printf("%s/.openocd", home);
+
+               if (path) 
+               {
+                       add_script_search_dir(path);
+                       free(path);
+               }
+       }
+
        add_script_search_dir(PKGDATADIR "/site");
        add_script_search_dir(PKGDATADIR "/scripts");
 #endif
-       return ERROR_OK;
 }
 
-int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[])
+int parse_cmdline_args(struct command_context *cmd_ctx, int argc, char *argv[])
 {
        int c;
        char command_buffer[128];
@@ -177,7 +190,7 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
 
        if (help_flag)
        {
-               LOG_OUTPUT("Open On-Chip Debugger\n(c) 2005-2008 by Dominic Rath\n\n");
+               LOG_OUTPUT("Open On-Chip Debugger\nLicensed under GNU GPL v2\n");
                LOG_OUTPUT("--help       | -h\tdisplay this help\n");
                LOG_OUTPUT("--version    | -v\tdisplay OpenOCD version\n");
                LOG_OUTPUT("--file       | -f\tuse configuration file <name>\n");
@@ -196,5 +209,10 @@ int parse_cmdline_args(struct command_context_s *cmd_ctx, int argc, char *argv[]
                exit(0);
        }
 
+       /* paths specified on the command line take precedence over these
+        * built-in paths
+        */
+       add_default_dirs();
+
        return ERROR_OK;
 }