> On January 22, 2016 at 4:34 PM Rainer Weikusat
> <rainerweiku...@virginmedia.com> wrote:
> 
> Can the effect of the following C function
> 
> static void print_start(char const *name, char const *what)
> {
>     char *buf, *p;
>     unsigned name_len, what_len, total;
> 
>     name_len = strlen(name);
>     what_len = strlen(what);
>     total = name_len + what_len + 3;
>     
>     p = buf = alloca(total);
>     memcpy(p, name, name_len);
>     p += name_len;
>     *p++ = ' ';
>     memcpy(p, what, what_len);
>     p += what_len;
>     *p++ = ':';
>     *p = ' ';
>     
>     *buf &= ~0x20;
> 
>     Write(2, buf, total);
> }
> 
> be considered obvious or should it rather get an explanation?
> 
> An ASCII lowercase letter can be turned into the corresponding uppercase
> letter by clearing the sixth bit.

I'm unhappy for two reasons:

  the failure mode of alloca is SIGSEGV or some other malfunction and there is
no way to test for it

  the *buf &= ~0x20; breaks for UTF8 strings.

Nevermind that the function implicitly references stderr except when it doesn't.

Peter Olson
_______________________________________________
Dng mailing list
Dng@lists.dyne.org
https://mailinglists.dyne.org/cgi-bin/mailman/listinfo/dng

Reply via email to