/* Prepend the whitespace-separated options in OPTIONS to the argument vector of a main program with argument count *PARGC and argument vector *PARGV. */ void prepend_default_options (char const *options, int *pargc, char ***pargv) { if (options) { char *buf = xmalloc (strlen (options) + 1); int prepended = prepend_args (options, buf, (char **) 0); int argc = *pargc; char * const *argv = *pargv; char **pp = (char **) xmalloc ((prepended + argc + 1) * sizeof *pp); *pargc = prepended + argc; *pargv = pp; *pp++ = *argv++; pp += prepend_args (options, buf, pp); while ((*pp++ = *argv++)) continue; } }
gboolean tracker_compatible (int argc, const char **argv, int *new_argc, char ***new_argv) { *new_argc = 0; *new_argv = NULL; /* * Conversions: * $ tracker-control * --list-processes | -p --> 'tracker daemon $same_args' * --kill | -k --> 'tracker daemon $same_args' * --terminate | -t --> 'tracker daemon $same_args' * --hard-reset | -r --> 'tracker reset --hard | -r' * --soft-reset | -e --> 'tracker reset --soft | -e' * --remove-config | -c --> 'tracker reset --config | -c' * --start | -s --> 'tracker daemon $same_args' * --backup | -b --> 'tracker index $same_args' * --restore | -o --> 'tracker index $same_args' * --set-log-verbosity --> 'tracker daemon $same_args' * --get-log-verbosity --> 'tracker daemon $same_args' * --collect-debug-info --> 'tracker status $same_args' * --watch | -w --> 'tracker daemon --watch | -w' * --follow | -F --> 'tracker daemon --follow | -f' * --list-common-statuses --> 'tracker daemon $same_args' * --list-miners-running --> 'tracker daemon $same_args' * --list-miners-available --> 'tracker daemon $same_args' * --miner --> 'tracker daemon $same_args' * --pause-details --> 'tracker daemon $same_args' * --pause --> 'tracker daemon $same_args' * --pause-for-process --> 'tracker daemon $same_args' * --resume --> 'tracker daemon $same_args' * --status | -S --> 'tracker daemon' (no args) * --reindex-mime-type | -m --> 'tracker index $same_args' * --index-file | -f --> 'tracker index --file | -f' * * $ tracker-stats --> 'tracker status --stat $same_args' * * $ tracker-import --> 'tracker index --import | -i' * */ if (strcmp (argv[0], "stats") == 0) { prepend_args ("status --stat", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (strcmp (argv[0], "import") == 0) { prepend_args ("index --import", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (strcmp (argv[0], "control") == 0) { if (find_arg ("--list-processes", "-p", argc, argv) || find_arg ("--kill", "-k", argc, argv) || find_arg ("--terminate", "-t", argc, argv) || find_arg ("--start", "-s", argc, argv) || find_arg ("--set-log-verbosity", NULL, argc, argv) || find_arg ("--get-log-verbosity", NULL, argc, argv) || find_arg ("--watch", "-w", argc, argv) || find_arg ("--list-common-statuses", NULL, argc, argv) || find_arg ("--list-miners-running", NULL, argc, argv) || find_arg ("--list-miners-available", NULL, argc, argv) || find_arg ("--miner", NULL, argc, argv) || find_arg ("--pause-details", NULL, argc, argv) || find_arg ("--pause", NULL, argc, argv) || find_arg ("--pause-for-process", NULL, argc, argv) || find_arg ("--resume", NULL, argc, argv)) { argv[0] = "daemon"; return FALSE; } else if (find_arg ("--follow", "-F", argc, argv)) { /* Previously, we had -F, now we support -f */ *new_argv = g_strsplit ("daemon --follow", " ", -1); *new_argc = 2; return TRUE; } else if (find_arg ("--collect-debug-info", NULL, argc, argv)) { argv[0] = "status"; return FALSE; } else if (find_arg ("--hard-reset", "-r", argc, argv)) { *new_argv = g_strsplit ("reset --hard", " ", -1); *new_argc = 2; return TRUE; } else if (find_arg ("--soft-reset", "-e", argc, argv)) { *new_argv = g_strsplit ("reset --soft", " ", -1); *new_argc = 2; return TRUE; } else if (find_arg ("--remove-config", "-c", argc, argv)) { *new_argv = g_strsplit ("reset --config", " ", -1); *new_argc = 2; return TRUE; } else if (find_arg ("--backup", "-b", argc, argv)) { prepend_args ("index --backup", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (find_arg ("--restore", "-o", argc, argv)) { prepend_args ("index --restore", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (find_arg ("--reindex-mime-type", "-m", argc, argv)) { prepend_args ("index --reindex-mime-type", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (find_arg ("--index-file", "-f", argc, argv)) { prepend_args ("index --file", 1, 1, argc, argv, new_argc, new_argv); return TRUE; } else if (find_arg ("--help", "-h", argc, argv)) { g_printerr ("%s\n\n", _("The 'tracker-control' command is no longer available")); *new_argv = g_strsplit ("daemon -h", " ", -1); *new_argc = 2; return TRUE; } else { /* This includes --status and -S */ *new_argv = g_strsplit ("daemon", " ", -1); *new_argc = 1; return TRUE; } } /* Return TRUE if we have new argv/argc, otherwise FALSE */ return FALSE; }