X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=libbb%2Fbb_askpass.c;h=cf384e52b9d1915b2f2275048c2b4443f898bfb5;hb=966ec7c067d7a2df5232a69c8d3d2e777347a62d;hp=42ccd66d322ca0dcfef2fece0c20ea5d6b813632;hpb=e422af6bcb15a92b7eba3da5b5cf1bcc8c0b5f5c;p=oweals%2Fbusybox.git diff --git a/libbb/bb_askpass.c b/libbb/bb_askpass.c index 42ccd66d3..cf384e52b 100644 --- a/libbb/bb_askpass.c +++ b/libbb/bb_askpass.c @@ -5,19 +5,7 @@ * * Copyright (C) 1999-2004 by Erik Andersen * - * 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. - * - * 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 + * Licensed under GPLv2 or later, see file LICENSE in this tarball for details. */ #include @@ -27,28 +15,27 @@ #include #include #include -#define PWD_BUFFER_SIZE 256 +#include "libbb.h" /* do nothing signal handler */ -static void askpass_timeout(int ignore) +static void askpass_timeout(int ATTRIBUTE_UNUSED ignore) { } char *bb_askpass(int timeout, const char * prompt) { + static char passwd[64]; + char *ret; - int i, size; + int i; struct sigaction sa; struct termios old, new; - static char passwd[PWD_BUFFER_SIZE]; tcgetattr(STDIN_FILENO, &old); tcflush(STDIN_FILENO, TCIFLUSH); - size = sizeof(passwd); - ret = passwd; - memset(passwd, 0, size); + memset(passwd, 0, sizeof(passwd)); fputs(prompt, stdout); fflush(stdout); @@ -65,15 +52,16 @@ char *bb_askpass(int timeout, const char * prompt) alarm(timeout); } - if (read(STDIN_FILENO, passwd, size-1) <= 0) { - ret = NULL; - } else { - for(i = 0; i < size && passwd[i]; i++) { - if (passwd[i]== '\r' || passwd[i] == '\n') { - passwd[i]= 0; - break; - } - } + ret = NULL; + if (read(STDIN_FILENO, passwd, sizeof(passwd)-1) > 0) { + ret = passwd; + i = 0; + /* Last byte is guaranteed to be 0 + (read did not overwrite it) */ + do { + if (passwd[i] == '\r' || passwd[i] == '\n') + passwd[i] = 0; + } while (passwd[i++]); } if (timeout) { @@ -81,8 +69,7 @@ char *bb_askpass(int timeout, const char * prompt) } tcsetattr(STDIN_FILENO, TCSANOW, &old); - fputs("\n", stdout); + puts(""); fflush(stdout); return ret; } -