diff --git a/bin/xbps-bin/Makefile b/bin/xbps-bin/Makefile index 5573051f..3a72fbf5 100644 --- a/bin/xbps-bin/Makefile +++ b/bin/xbps-bin/Makefile @@ -4,6 +4,7 @@ TOPDIR = ../.. BIN = xbps-bin OBJS = check.o install.o main.o remove.o show-deps.o OBJS += show-info-files.o ../xbps-repo/util.o find-files.o +OBJS += question.o MAN = $(BIN).8 include $(TOPDIR)/prog.mk diff --git a/bin/xbps-bin/defs.h b/bin/xbps-bin/defs.h index e1965951..d65f6edc 100644 --- a/bin/xbps-bin/defs.h +++ b/bin/xbps-bin/defs.h @@ -43,5 +43,7 @@ int xbps_show_pkg_reverse_deps(const char *); int show_pkg_info_from_metadir(const char *); int show_pkg_files_from_metadir(const char *); int find_files_in_packages(const char *); +bool xbps_yesno(const char *, ...); +bool xbps_noyes(const char *, ...); #endif /* !_XBPS_BIN_DEFS_H_ */ diff --git a/bin/xbps-bin/question.c b/bin/xbps-bin/question.c new file mode 100644 index 00000000..0f5d3838 --- /dev/null +++ b/bin/xbps-bin/question.c @@ -0,0 +1,109 @@ +/*- + * Copyright (c) 2008-2010 Juan Romero Pardines. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#include +#include +#include +#include +#include + +#include "defs.h" + +static char * +strtrim(char *str) +{ + char *pch = str; + + if (str == NULL || *str == '\0') + return str; + + while (isspace((unsigned char)*pch)) + pch++; + + if (pch != str) + memmove(str, pch, (strlen(pch) + 1)); + + if (*str == '\0') + return str; + + pch = (str + (strlen(str) - 1)); + while (isspace((unsigned char)*pch)) + pch--; + + *++pch = '\0'; + + return str; +} + +static bool +question(bool preset, const char *fmt, va_list ap) +{ + char response[32]; + + vfprintf(stderr, fmt, ap); + if (preset) + fprintf(stderr, " %s ", "[YES/no]"); + else + fprintf(stderr, " %s ", "[yes/NO]"); + + if (fgets(response, 32, stdin)) { + (void)strtrim(response); + if (strlen(response) == 0) + return preset; + + if (strcasecmp(response, "yes") == 0) + return true; + else if (strcasecmp(response, "no") == 0) + return false; + } + return false; +} + +bool +xbps_yesno(const char *fmt, ...) +{ + va_list ap; + bool res; + + va_start(ap, fmt); + res = question(1, fmt, ap); + va_end(ap); + + return res; +} + +bool +xbps_noyes(const char *fmt, ...) +{ + va_list ap; + bool res; + + va_start(ap, fmt); + res = question(0, fmt, ap); + va_end(ap); + + return res; +} diff --git a/include/xbps_api.h b/include/xbps_api.h index c3c5a037..f8b924c3 100644 --- a/include/xbps_api.h +++ b/include/xbps_api.h @@ -51,7 +51,7 @@ * @def XBPS_RELVER * Current library release date. */ -#define XBPS_RELVER "20110118" +#define XBPS_RELVER "20110119" /** * @def XBPS_META_PATH @@ -1081,9 +1081,6 @@ void xbps_set_flags(int flags); */ int xbps_get_flags(void); -bool xbps_yesno(const char *, ...); -bool xbps_noyes(const char *, ...); - /*@}*/ __END_DECLS diff --git a/lib/util.c b/lib/util.c index 18acbdd5..d1bfec4e 100644 --- a/lib/util.c +++ b/lib/util.c @@ -493,79 +493,3 @@ xbps_xasprintf(const char *fmt, ...) return buf; } - -static char * -strtrim(char *str) -{ - char *pch = str; - - if (str == NULL || *str == '\0') - return str; - - while (isspace((unsigned char)*pch)) - pch++; - - if (pch != str) - memmove(str, pch, (strlen(pch) + 1)); - - if (*str == '\0') - return str; - - pch = (str + (strlen(str) - 1)); - while (isspace((unsigned char)*pch)) - pch--; - - *++pch = '\0'; - - return str; -} - -static bool -question(bool preset, const char *fmt, va_list ap) -{ - char response[32]; - - vfprintf(stderr, fmt, ap); - if (preset) - fprintf(stderr, " %s ", "[YES/no]"); - else - fprintf(stderr, " %s ", "[yes/NO]"); - - if (fgets(response, 32, stdin)) { - (void)strtrim(response); - if (strlen(response) == 0) - return preset; - - if (strcasecmp(response, "yes") == 0) - return true; - else if (strcasecmp(response, "no") == 0) - return false; - } - return false; -} - -bool -xbps_yesno(const char *fmt, ...) -{ - va_list ap; - bool res; - - va_start(ap, fmt); - res = question(1, fmt, ap); - va_end(ap); - - return res; -} - -bool -xbps_noyes(const char *fmt, ...) -{ - va_list ap; - bool res; - - va_start(ap, fmt); - res = question(0, fmt, ap); - va_end(ap); - - return res; -}