bug-hurd
[Top][All Lists]
Advanced

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

Re: Console server patch


From: marco
Subject: Re: Console server patch
Date: Sun, 18 May 2003 17:06:11 +0200 (CEST)

>  I mentioned before, this is not a valid way to check if asprintf
> failed.
> You should do
> if (asprintf(&buf, ...) < 0)
>   error case

Ok, I was less lazy today and I've fixed it, even for the surrounding
code. Thanks for your help.

(See the changelog entry and patch for details)

Thanks,
Marco

2003-04-29  Marco Gerards   <metgerards@student.han.nl>
        * display.c (display_create): Added arguments width, height and
        lines, variables with the same name were removed.
        * display.h (display_creat): Add missing arguments to prototype.
        * console.c (DEFAULT_WIDTH): New macro.
        (DEFAULT_HEIGHT): Likewise.
        (DEFAULT_LINES): Likewise.
        (STRX): Likewise.
        (STR): Likewise.
        (struct cons): New members lines, width and height.
        (vcons_lookup): Add missing arguments to display_create.
        (options): Add options width, height and lines.
        (parse_opt): Parse width, height and lines.
        (netfs_append_args): Append arguments width, height and lines.
        (netfs_append_args): Fix asprintf error checking.
        (main): Initialize cons with default width, height and lines.


diff -up /home/marco/console/console.c console/console.c
--- /home/marco/console/console.c       2003-05-17 03:04:48.000000000 +0200
+++ console/console.c   2003-05-18 18:25:45.000000000 +0200
@@ -1,5 +1,5 @@
 /* console.c -- A console server.
-   Copyright (C) 1997, 1999, 2002 Free Software Foundation, Inc.
+   Copyright (C) 1997, 1999, 2002, 2003 Free Software Foundation, Inc.
    Written by Miles Bader and Marcus Brinkmann.

    This program is free software; you can redistribute it and/or
@@ -61,6 +61,13 @@ volatile struct mapped_time_value *conso
 #define DEFAULT_BLINKING 0
 #define DEFAULT_REVERSED 0
 #define DEFAULT_CONCEALED 0
+#define DEFAULT_WIDTH 80
+#define DEFAULT_HEIGHT 25
+#define DEFAULT_LINES 50
+/* Stringification of a macro.  */
+#define STRX(s) #s
+#define STR(s) STRX(s)
+
 /* For the help output.  */
 #define DEFAULT_ATTRIBUTE_NAME "normal"
 #define DEFAULT_FOREGROUND CONS_COLOR_WHITE
@@ -128,6 +135,11 @@ struct cons
   mach_port_t underlying;
   /* A template for the stat information of all nodes.  */
   struct stat stat_template;
+
+  /* The amount of lines, width and height.  */
+  unsigned int lines;
+  unsigned int width;
+  unsigned int height;
 };



@@ -222,7 +234,8 @@ vcons_lookup (cons_t cons, int id, int c

   mutex_init (&vcons->lock);
   err = display_create (&vcons->display, cons->encoding ?: DEFAULT_ENCODING,
-                       cons->attribute);
+                       cons->attribute, cons->lines, cons->width,
+                       cons->height);
   if (err)
     {
       free (vcons->name);
@@ -1335,6 +1348,12 @@ static const struct argp_option options[
     " (default `" DEFAULT_ATTRIBUTE_NAME "')" },
   { "encoding",        'e', "NAME", 0, "Set encoding of virtual consoles to"
     " NAME (default `" DEFAULT_ENCODING "')" },
+  { "width", 'w', "WIDTH", 0, "Set width to WIDTH (default `"
+    STR(DEFAULT_WIDTH) "')" },
+  { "height", 'h', "HEIGHT", 0, "Set height to HEIGHT (default `"
+    STR(DEFAULT_HEIGHT) "')" },
+  { "lines", 'l', "LINES", 0, "Set amount of scrollback lines to LINES "
+    "(default `" STR(DEFAULT_LINES) "')" },
   {0}
 };

@@ -1443,7 +1462,8 @@ parse_opt (int opt, char *arg, struct ar
   cons_t cons = state->input ?: netfs_root_node->nn->cons;
   error_t err;
   int color = 0;
-
+  char *tail;
+
   switch (opt)
     {
     default:
@@ -1479,6 +1499,33 @@ parse_opt (int opt, char *arg, struct ar
       if (err)
        argp_error (state, "Invalid attribute specifier: %s", arg);
       break;
+
+    case 'l':
+      errno = 0;
+      cons->lines = strtoul (arg, &tail, 0);
+      if (tail == NULL || tail == arg || *tail != '\0')
+       argp_error (state, "LINES is not a number: %s", arg);
+      if (errno)
+       argp_error (state, "Overflow in argument LINES %s", arg);
+      break;
+
+    case 'w':
+      errno = 0;
+      cons->width = strtoul (arg, &tail, 0);
+      if (tail == NULL || tail == arg || *tail != '\0')
+       argp_error (state, "WIDTH is not a number: %s", arg);
+      if (errno)
+       argp_error (state, "Overflow in argument WIDTH %s", arg);
+      break;
+
+    case 'h':
+      errno = 0;
+      cons->height = strtoul (arg, &tail, 0);
+      if (tail == NULL || tail == arg || *tail != '\0')
+       argp_error (state, "HEIGHT is not a number: %s", arg);
+      if (errno)
+       argp_error (state, "Overflow in argument HEIGHT %s", arg);
+      break;

     case 'e':
       /* XXX Check validity of encoding.  Can we perform all necessary
@@ -1513,29 +1560,54 @@ netfs_append_args (char **argz, size_t *
   if (cons->encoding && strcmp (cons->encoding, DEFAULT_ENCODING))
     {
       char *buf;
-      asprintf (&buf, "--encoding=%s", cons->encoding);
-      if (buf)
-       err = argz_add (argz, argz_len, buf);
+      if (asprintf (&buf, "--encoding=%s", cons->encoding) < 0)
+       err = ENOMEM;
       else
-       err = errno;
+       err = argz_add (argz, argz_len, buf);
+
     }
   if (!err && cons->attribute.fgcol != DEFAULT_FOREGROUND)
     {
       char *buf;
-      asprintf (&buf, "--foreground=%s",
color_names[cons->attribute.fgcol]);
-      if (buf)
-       err = argz_add (argz, argz_len, buf);
+      if (asprintf (&buf, "--foreground=%s",
+                   color_names[cons->attribute.fgcol]) < 0)
+       err = ENOMEM;
       else
-       err = errno;
+       err = argz_add (argz, argz_len, buf);
+
     }
   if (!err && cons->attribute.bgcol != DEFAULT_BACKGROUND)
     {
       char *buf;
-      asprintf (&buf, "--background=%s",
color_names[cons->attribute.bgcol]);
-      if (buf)
+      if (asprintf (&buf, "--background=%s",
+                   color_names[cons->attribute.bgcol]) < 0)
+       err = ENOMEM;
+      else
        err = argz_add (argz, argz_len, buf);
+    }
+  if (!err && cons->lines != DEFAULT_LINES)
+    {
+      char *buf;
+      if (asprintf (&buf, "--lines=%d", cons->lines) < 0)
+       err = ENOMEM;
       else
-       err = errno;
+       err = argz_add (argz, argz_len, buf);
+    }
+  if (!err && cons->width != DEFAULT_WIDTH)
+    {
+      char *buf;
+      if (asprintf (&buf, "--width=%d", cons->lines) < 0)
+       err = ENOMEM;
+      else
+       err = argz_add (argz, argz_len, buf);
+    }
+  if (!err && cons->height != DEFAULT_HEIGHT)
+    {
+      char *buf;
+      if (asprintf (&buf, "--height=%d", cons->height) < 0)
+       err = ENOMEM;
+      else
+       err = argz_add (argz, argz_len, buf);
     }
   if (!err && cons->attribute.intensity != DEFAULT_INTENSITY)
     {
@@ -1588,6 +1660,7 @@ netfs_append_args (char **argz, size_t *
     }
   if (!err && attrp != attr)
     err = argz_add (argz, argz_len, attr_str);
+
   return err;
 }

@@ -1930,6 +2003,9 @@ main (int argc, char **argv)
     error (1, ENOMEM, "Cannot create console structure");
   mutex_init (&cons->lock);
   cons->encoding = NULL;
+  cons->width = DEFAULT_WIDTH;
+  cons->height = DEFAULT_HEIGHT;
+  cons->lines = DEFAULT_LINES;
   cons->attribute.intensity = DEFAULT_INTENSITY;
   cons->attribute.underlined = DEFAULT_UNDERLINED;
   cons->attribute.blinking = DEFAULT_BLINKING;
Only in console: core
Only in console: CVS
diff -up /home/marco/console/display.c console/display.c
--- /home/marco/console/display.c       2003-05-17 03:04:48.000000000 +0200
+++ console/display.c   2003-04-28 19:23:27.000000000 +0200
@@ -1,6 +1,6 @@
 /* display.c - The display component of a virtual console.
    Copyright (C) 1999 Kalle Olavi Niemitalo (emu.c from colortext 0.3).
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    Written by Marcus Brinkmann and Kalle Olavi Niemitalo.

    This file is part of the GNU Hurd.
@@ -1801,13 +1801,11 @@ display_init (void)
    being ENCODING.  */
 error_t
 display_create (display_t *r_display, const char *encoding,
-               conchar_attr_t def_attr)
+               conchar_attr_t def_attr, unsigned int lines,
+               unsigned int width, unsigned int height)
 {
   error_t err = 0;
   display_t display;
-  int width = 80;
-  int height = 25;
-  int lines = 50;      /* XXX For now.  */

   *r_display = NULL;
   display = calloc (1, sizeof *display);
diff -up /home/marco/console/display.h console/display.h
--- /home/marco/console/display.h       2003-05-17 03:04:48.000000000 +0200
+++ console/display.h   2003-04-28 19:24:16.000000000 +0200
@@ -1,5 +1,5 @@
 /* display.h - Interface to the display component of a virtual console.
-   Copyright (C) 2002 Free Software Foundation, Inc.
+   Copyright (C) 2002, 2003 Free Software Foundation, Inc.
    Written by Marcus Brinkmann.

    This file is part of the GNU Hurd.
@@ -30,8 +30,11 @@ void display_init (void);

 /* Create a new virtual console display, with the system encoding
    being ENCODING and the default colors being FOREGROUND and BACKGROUND.
 */
-error_t display_create (display_t *r_display, const char *encoding,
-                       conchar_attr_t attr);
+error_t
+display_create (display_t *r_display, const char *encoding,
+               conchar_attr_t def_attr, unsigned int lines,
+               unsigned int width, unsigned int height);
+

 /* Destroy the display DISPLAY.  */
 void display_destroy (display_t display);







reply via email to

[Prev in Thread] Current Thread [Next in Thread]