Re: [patch] vcs.4: broken example code

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hello Mattias,

On Tue, 30 Oct 2018 at 16:12, Mattias Engdegård <mattiase@xxxxxxx> wrote:
>
> Ping. (Michael Witten wanted to update the page text but let's at least
> fix the example code first.)
>
> Fix broken example code in the vcs.4 man page
> - use of wrong variable (attrib, which is uninitialised, instead of s)
> - variable ch too narrow
> - printing a font char index with %c, as if it were ASCII (it's not)
> - removing the high font bit while changing the background colour
> - unwarranted assumption of little-endian byte order
>
> Also be friendly and use SEEK_* instead of numbers.

Thanks for your persistence. Michael, thanks for looking over the patch.

Patch applied.

Cheers,

Michael

> ---
>  man4/vcs.4 | 15 ++++++++-------
>  1 file changed, 8 insertions(+), 7 deletions(-)
>
> diff --git a/man4/vcs.4 b/man4/vcs.4
> index aebe8cfda..f695b956c 100644
> --- a/man4/vcs.4
> +++ b/man4/vcs.4
> @@ -140,7 +140,8 @@ main(void)
>      struct {unsigned char lines, cols, x, y;} scrn;
>      unsigned short s;
>      unsigned short mask;
> -    unsigned char ch, attrib;
> +    unsigned char attrib;
> +    int ch;
>
>      fd = open(console, O_RDWR);
>      if (fd < 0) {
> @@ -158,16 +159,16 @@ main(void)
>          exit(EXIT_FAILURE);
>      }
>      (void) read(fd, &scrn, 4);
> -    (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), 0);
> +    (void) lseek(fd, 4 + 2*(scrn.y*scrn.cols + scrn.x), SEEK_SET);
>      (void) read(fd, &s, 2);
>      ch = s & 0xff;
> -    if (attrib & mask)
> +    if (s & mask)
>          ch |= 0x100;
>      attrib = ((s & ~mask) >> 8);
> -    printf("ch=\(aq%c\(aq attrib=0x%02x\\n", ch, attrib);
> -    attrib ^= 0x10;
> -    (void) lseek(fd, \-1, 1);
> -    (void) write(fd, &attrib, 1);
> +    printf("ch=0x%03x attrib=0x%02x\\n", ch, attrib);
> +    s ^= 0x1000;
> +    (void) lseek(fd, \-2, SEEK_CUR);
> +    (void) write(fd, &s, 2);
>      exit(EXIT_SUCCESS);
>  }
>  .EE
>
>


-- 
Michael Kerrisk
Linux man-pages maintainer; http://www.kernel.org/doc/man-pages/
Linux/UNIX System Programming Training: http://man7.org/training/




[Index of Archives]     [Kernel Documentation]     [Netdev]     [Linux Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux