[Pdbg] [PATCH 05/10] main: Add an option for path based targetting
Alistair Popple
alistair at popple.id.au
Wed Oct 31 15:01:19 AEDT 2018
Hi Amitay,
On Tuesday, 2 October 2018 4:04:26 PM AEDT Amitay Isaacs wrote:
> +static bool pathsel_add(char *format, ...) __attribute__((format (printf,
> 1, 2))); +
> +static bool pathsel_add(char *format, ...)
> +{
> + va_list ap;
> + char path[1024];
> + int len;
> +
> + va_start(ap, format);
> +
> + len = vsnprintf(path, sizeof(path), format, ap);
I can't quite figure out what's going on here. As far as I can tell you're just
passing a single string (optarg) to this function and adding it to the pathsel
array. Why do we need the vsnprintf and the va_args? Am I missing something?
Thanks.
> + if (len > sizeof(path)) {
> + va_end(ap);
> + return false;
> + }
> +
> + va_end(ap);
> +
> + if (pathsel_count == MAX_PATH_ARGS) {
> + fprintf(stderr, "Too many path arguments\n");
> + return false;
> + }
> +
> + pathsel[pathsel_count] = strdup(path);
> + assert(pathsel[pathsel_count]);
> + pathsel_count++;
> +
> + return true;
> +}
> +
> static bool parse_options(int argc, char *argv[])
> {
> int c;
> @@ -263,6 +300,7 @@ static bool parse_options(int argc, char *argv[])
> {"cpu", required_argument, NULL, 'l'},
> #endif
> {"debug", required_argument, NULL, 'D'},
> + {"path", required_argument, NULL, 'P'},
> {"shutup", no_argument, NULL, 'S'},
> {"version", no_argument, NULL, 'V'},
> {NULL, 0, NULL, 0}
> @@ -275,7 +313,7 @@ static bool parse_options(int argc, char *argv[])
> memset(l_list, 0, sizeof(l_list));
>
> do {
> - c = getopt_long(argc, argv, "+ab:c:d:hp:s:t:D:SV" PPC_OPTS,
> + c = getopt_long(argc, argv, "+ab:c:d:hp:s:t:D:P:SV" PPC_OPTS,
> long_opts, NULL);
> if (c == -1)
> break;
> @@ -361,6 +399,11 @@ static bool parse_options(int argc, char *argv[])
> fprintf(stderr, "Invalid slave address '%s'\n", optarg);
> break;
>
> + case 'P':
> + if (!pathsel_add(optarg))
> + opt_error = true;
> + break;
> +
> case 'S':
> progress_shutup();
> break;
> @@ -647,6 +690,11 @@ static bool target_selection(void)
> target_unselect(fsi);
> }
>
> + if (pathsel_count) {
> + if (!path_target_parse(pathsel, pathsel_count))
> + return false;
> + }
> +
> return true;
> }
More information about the Pdbg
mailing list