On 2020-02-16, Quentin Rameau <quinq@fifth.space> wrote:
> I think something like that is better, what do you think?

Thanks, this looks good to me. Please resend with a commit message.

> diff --git a/od.c b/od.c
> index 0b1c5c6..9ff8ff2 100644
> --- a/od.c
> +++ b/od.c
> @@ -212,7 +212,7 @@ main(int argc, char *argv[])
>  {
>       int fd;
>       struct type *t;
> -     int ret = 0, len;
> +     int ret = 0, len, defbytes;
>       char *s;
>
>       big_endian = (*(uint16_t *)"\0\xff" == 0xff);
> @@ -260,6 +260,7 @@ main(int argc, char *argv[])
>                       case 'o':
>                       case 'u':
>                       case 'x':
> +                             defbytes = 0;
>                               /* todo: allow multiple digits */
>                               if (*(s+1) > '0' && *(s+1) <= '9') {
>                                       len = *(s+1) - '0';
> @@ -271,17 +272,17 @@ main(int argc, char *argv[])
>                                       case 'S':
>                                               len = sizeof(short);
>                                               break;
> +                                     default:
> +                                             defbytes = 1;
>                                       case 'I':
>                                               len = sizeof(int);
>                                               break;
>                                       case 'L':
>                                               len = sizeof(long);
>                                               break;
> -                                     default:
> -                                             len = sizeof(int);
>                                       }
>                               }
> -                             addtype(*s++, len);
> +                             addtype(defbytes ? *s : *s++, len);

I think the increment should be separate for clarity; defbytes isn't
really controlling the parameter, just whether or not s is advanced.

        addtype(*s, len);
        if (!defbytes)
                s++;

>                               break;
>                       default:
>                               usage();
>
>

Reply via email to