Merged

On 27 Aug (15:46:57), Jonathan Rajotte Julien wrote:
> This bug have been triggered by the mi merging and the use of a
> command_ret in enable_events functions. Previously, enable_events was
> reusing the ret variable for another operation and always replacing ret.
> Parse_probe_event returned the last output of sscanf which represent
> the number of match and not the success of the operation.
> 
> Fixes #830
> 
> Signed-off-by: Jonathan Rajotte Julien <[email protected]>
> ---
>  src/bin/lttng/commands/enable_events.c | 27 ++++++++++++++-------------
>  1 file changed, 14 insertions(+), 13 deletions(-)
> 
> diff --git a/src/bin/lttng/commands/enable_events.c 
> b/src/bin/lttng/commands/enable_events.c
> index f62dadb..3263c58 100644
> --- a/src/bin/lttng/commands/enable_events.c
> +++ b/src/bin/lttng/commands/enable_events.c
> @@ -247,26 +247,27 @@ static void usage(FILE *ofp)
>   */
>  static int parse_probe_opts(struct lttng_event *ev, char *opt)
>  {
> -     int ret;
> +     int ret = CMD_SUCCESS;
> +     int match;
>       char s_hex[19];
>  #define S_HEX_LEN_SCANF_IS_A_BROKEN_API "18" /* 18 is (19 - 1) (\0 is extra) 
> */
>       char name[LTTNG_SYMBOL_NAME_LEN];
>  
>       if (opt == NULL) {
> -             ret = -1;
> +             ret = CMD_ERROR;
>               goto end;
>       }
>  
>       /* Check for symbol+offset */
> -     ret = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API
> +     match = sscanf(opt, "%" LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API
>                       "[^'+']+%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s", name, 
> s_hex);
> -     if (ret == 2) {
> +     if (match == 2) {
>               strncpy(ev->attr.probe.symbol_name, name, 
> LTTNG_SYMBOL_NAME_LEN);
>               ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
>               DBG("probe symbol %s", ev->attr.probe.symbol_name);
>               if (*s_hex == '\0') {
>                       ERR("Invalid probe offset %s", s_hex);
> -                     ret = -1;
> +                     ret = CMD_ERROR;
>                       goto end;
>               }
>               ev->attr.probe.offset = strtoul(s_hex, NULL, 0);
> @@ -277,9 +278,9 @@ static int parse_probe_opts(struct lttng_event *ev, char 
> *opt)
>  
>       /* Check for symbol */
>       if (isalpha(name[0])) {
> -             ret = sscanf(opt, "%" 
> LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "s",
> +             match = sscanf(opt, "%" 
> LTTNG_SYMBOL_NAME_LEN_SCANF_IS_A_BROKEN_API "s",
>                       name);
> -             if (ret == 1) {
> +             if (match == 1) {
>                       strncpy(ev->attr.probe.symbol_name, name, 
> LTTNG_SYMBOL_NAME_LEN);
>                       ev->attr.probe.symbol_name[LTTNG_SYMBOL_NAME_LEN - 1] = 
> '\0';
>                       DBG("probe symbol %s", ev->attr.probe.symbol_name);
> @@ -291,11 +292,11 @@ static int parse_probe_opts(struct lttng_event *ev, 
> char *opt)
>       }
>  
>       /* Check for address */
> -     ret = sscanf(opt, "%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s", s_hex);
> -     if (ret > 0) {
> +     match = sscanf(opt, "%" S_HEX_LEN_SCANF_IS_A_BROKEN_API "s", s_hex);
> +     if (match > 0) {
>               if (*s_hex == '\0') {
>                       ERR("Invalid probe address %s", s_hex);
> -                     ret = -1;
> +                     ret = CMD_ERROR;
>                       goto end;
>               }
>               ev->attr.probe.addr = strtoul(s_hex, NULL, 0);
> @@ -306,7 +307,7 @@ static int parse_probe_opts(struct lttng_event *ev, char 
> *opt)
>       }
>  
>       /* No match */
> -     ret = -1;
> +     ret = CMD_ERROR;
>  
>  end:
>       return ret;
> @@ -906,7 +907,7 @@ static int enable_events(char *session_name)
>                               break;
>                       case LTTNG_EVENT_PROBE:
>                               ret = parse_probe_opts(&ev, opt_probe);
> -                             if (ret < 0) {
> +                             if (ret) {
>                                       ERR("Unable to parse probe options");
>                                       ret = 0;
>                                       goto error;
> @@ -914,7 +915,7 @@ static int enable_events(char *session_name)
>                               break;
>                       case LTTNG_EVENT_FUNCTION:
>                               ret = parse_probe_opts(&ev, opt_function);
> -                             if (ret < 0) {
> +                             if (ret) {
>                                       ERR("Unable to parse function probe 
> options");
>                                       ret = 0;
>                                       goto error;
> -- 
> 2.0.4
> 
> 
> _______________________________________________
> lttng-dev mailing list
> [email protected]
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Attachment: signature.asc
Description: Digital signature

_______________________________________________
lttng-dev mailing list
[email protected]
http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev

Reply via email to