X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;f=ncurses%2Fbase%2Fvsscanf.c;h=40ee8bb1d87681456043fb02f032ae6deb3efa29;hb=e2c422e26543d96636d8bde422550ea9c7005e9c;hp=12df4aa3c15d4c9c3170650896852d9aada658e9;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01;p=ncurses.git diff --git a/ncurses/base/vsscanf.c b/ncurses/base/vsscanf.c index 12df4aa3..40ee8bb1 100644 --- a/ncurses/base/vsscanf.c +++ b/ncurses/base/vsscanf.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2001,2002 Free Software Foundation, Inc. * + * Copyright 2020,2023 Thomas E. Dickey * + * Copyright 1998-2004,2012 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -38,15 +39,12 @@ #if !HAVE_VSSCANF -MODULE_ID("$Id: vsscanf.c,v 1.16 2002/09/07 17:27:56 tom Exp $") +MODULE_ID("$Id: vsscanf.c,v 1.22 2023/09/23 18:48:57 tom Exp $") #if !(HAVE_VFSCANF || HAVE__DOSCAN) #include -#define L_SQUARE '[' -#define R_SQUARE ']' - typedef enum { cUnknown ,cError /* anything that isn't ANSI */ @@ -230,7 +228,7 @@ vsscanf(const char *str, const char *format, va_list ap) /* find a chunk */ state = sUnknown; chunk = cUnknown; - other = cUnknown; + other = oUnknown; pointer = 0; for (n = 0; format[n] != 0 && state != sFinal; ++n) { my_fmt[n] = format[n]; @@ -242,7 +240,7 @@ vsscanf(const char *str, const char *format, va_list ap) case sPercent: if (format[n] == '%') { state = sUnknown; - } else if (format[n] == L_SQUARE) { + } else if (format[n] == L_BLOCK) { state = sLeft; } else { state = sNormal; @@ -257,7 +255,7 @@ vsscanf(const char *str, const char *format, va_list ap) } break; case sRange: - if (format[n] == R_SQUARE) { + if (format[n] == R_BLOCK) { state = sFinal; chunk = cRange; } @@ -271,7 +269,7 @@ vsscanf(const char *str, const char *format, va_list ap) chunk = ctest; } else if ((otest = other_ch(format[n])) != oUnknown) { other = otest; - } else if (isalpha(format[n])) { + } else if (isalpha(UChar(format[n]))) { state = sFinal; chunk = cError; } @@ -293,12 +291,12 @@ vsscanf(const char *str, const char *format, va_list ap) /* add %n, if the format was not that */ if (chunk != cAssigned) { - strcat(my_fmt, "%n"); + _nc_STRCAT(my_fmt, "%n", len_fmt); } switch (chunk) { case cAssigned: - strcat(my_fmt, "%n"); + _nc_STRCAT(my_fmt, "%n", len_fmt); pointer = &eaten; break; case cInt: