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

issue (2)



Hi all,

I've modified my patch about /etc/issue support for getty.c. It's now
faster, and the code is cleaner. (Thanks to Niels!)  I attach here the
diff file and a single issue file to be used in GNU.

Hope you like,
  Julio.

-- 
Juli-Manel Merino Vidal <jmmv@mail.com>

----------------------------------------
   Become a GNU! (http://www.gnu.org)
     Running Debian GNU/Linux woody
----------------------------------------
20a21,22
> /* Modified by Julio Merino to add /etc/issue support */
> 
38a41
> #define _BANNER_FILE "/etc/issue"
47a51
>   FILE *f;
52,54c56,121
<   cc = asprintf (&s, "\r\n\n%s %s (%s) (%s)\r\n\n",
< 		 u.sysname, u.release, hostname ?: "?", basename (ttyname));
<   write (fd, s, cc);
---
>   f = fopen (_BANNER_FILE, "r");
>   if (!f)
>     {
>       /* Issue can't be open; print a default message */
>       cc = asprintf (&s, "\r\n\n%s %s (%s) (%s)\r\n\n",
>                      u.sysname, u.release, hostname ?: "?", basename
>                      (ttyname));
>       write (fd, s, cc);
>     }
>   else
>     {
>       int outfd;
>       FILE *out;
> 
>       outfd = dup (fd);
>       if (outfd < 0) return;
>       out = fdopen (outfd, "w");
>       
>       /* Read issue and print it */
>       for (;;)
>         {
>           int c;
>           
>           c = fgetc (f);
> 
>           switch (c)
>             {
>             case EOF:
>               fclose (f);
>               fclose (out);
>               return;
>             case '\\':
>               /* Escape secuence found */
>               c = fgetc (f);
>               switch (c)
>                 {
>                 case EOF:
>                   fputc ('\\', out);
>                   fclose (f);
>                   fclose (out);
>                   return;
>                 case 's': /* System name */
>                   fprintf (out, "%s", u.sysname);
>                   break;
>                 case 'r': /* Release */
>                   fprintf (out, "%s", u.release);
>                   break;
>                 case 'n': /* Hostname */
>                   fprintf (out, "%s", hostname);
>                   break;
>                 case 'l': /* TTY name */
>                   fprintf (out, "%s", basename (ttyname));
>                   break;
>                 case 'm': /* Machine */
>                   fprintf (out, "%s", u.machine);
>                   break;
>                 default:
>                   fputc (c, out);
>                 }
>               break;
>             default:
>               fputc (c, out);
>               break;
>             }
>         }
>     }

Attachment: issue
Description: Binary data


Reply to: