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