X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Flogin.c;h=646995b0bcc27cd938c4db78284f51b4510de11e;hb=1340ca8c87d81bf00e604905f25bc04da22e980f;hp=092f1594ad87744ef9c2d96d58152b9f84cc2075;hpb=883d4842d26e0ad7667c04579c089ec3ba7960d8;p=oweals%2Fbusybox.git diff --git a/libbb/login.c b/libbb/login.c index 092f1594a..646995b0b 100644 --- a/libbb/login.c +++ b/libbb/login.c @@ -1,121 +1,116 @@ +/* vi: set sw=4 ts=4: */ /* * issue.c: issue printing code * * Copyright (C) 2003 Bastian Blank * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. + * Optimize and correcting OCRNL by Vladimir Oleynik * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * $Id: login.c,v 1.2 2003/02/09 22:40:33 bug1 Exp $ + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ +#include /* MAXHOSTNAMELEN */ #include #include -#include "busybox.h" +#include "libbb.h" #include #include #define LOGIN " login: " -static char fmtstr_d[] = { "%A, %d %B %Y" }; -static char fmtstr_t[] = { "%H:%M:%S" }; +static const char fmtstr_d[] = "%A, %d %B %Y"; +static const char fmtstr_t[] = "%H:%M:%S"; void print_login_issue(const char *issue_file, const char *tty) { FILE *fd; int c; - char buf[256]; + char buf[256+1]; + const char *outbuf; time_t t; struct utsname uts; time(&t); uname(&uts); - puts(""); /* start a new line */ + puts("\r"); /* start a new line */ if ((fd = fopen(issue_file, "r"))) { while ((c = fgetc(fd)) != EOF) { + outbuf = buf; + buf[0] = c; + if(c == '\n') { + buf[1] = '\r'; + buf[2] = 0; + } else { + buf[1] = 0; + } if (c == '\\' || c == '%') { c = fgetc(fd); - switch (c) { case 's': - fputs(uts.sysname, stdout); + outbuf = uts.sysname; break; case 'n': - fputs(uts.nodename, stdout); + outbuf = uts.nodename; break; case 'r': - fputs(uts.release, stdout); + outbuf = uts.release; break; case 'v': - fputs(uts.version, stdout); + outbuf = uts.version; break; case 'm': - fputs(uts.machine, stdout); + outbuf = uts.machine; break; case 'D': case 'o': - getdomainname(buf, sizeof(buf)); - buf[sizeof(buf) - 1] = '\0'; - fputs(buf, stdout); + c = getdomainname(buf, sizeof(buf) - 1); + buf[c >= 0 ? c : 0] = '\0'; break; case 'd': strftime(buf, sizeof(buf), fmtstr_d, localtime(&t)); - fputs(buf, stdout); break; case 't': strftime(buf, sizeof(buf), fmtstr_t, localtime(&t)); - fputs(buf, stdout); break; case 'h': - gethostname(buf, sizeof(buf)); - fputs(buf, stdout); + gethostname(buf, sizeof(buf) - 1); + buf[sizeof(buf) - 1] = '\0'; break; case 'l': - printf("%s", tty); + outbuf = tty; + break; default: - putchar(c); + buf[0] = c; } - } else - putchar(c); + } + fputs(outbuf, stdout); } - puts(""); /* start a new line */ - fflush(stdout); - fclose(fd); + + fflush(stdout); } } void print_login_prompt(void) { - char buf[MAXHOSTNAMELEN]; + char buf[MAXHOSTNAMELEN+1]; - gethostname(buf, MAXHOSTNAMELEN); - fputs(buf, stdout); + if(gethostname(buf, MAXHOSTNAMELEN) == 0) + fputs(buf, stdout); fputs(LOGIN, stdout); fflush(stdout);