:: Re: [DNG] "Common knowledge?"-quest…
トップ ページ
このメッセージを削除
このメッセージに返信
著者: Peter Olson
日付:  
To: dng, Rainer Weikusat
題目: Re: [DNG] "Common knowledge?"-question
> On January 22, 2016 at 4:34 PM Rainer Weikusat
> <rainerweikusat@???> 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