X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=form%2Ffty_num.c;h=34cef6364bdb7bd2537365380dfd1b01a0d17ceb;hp=4bd71321d66acf67cfd4b4fd4d20e8ab2362d67a;hb=5a107d6f2a641ef5a33c8976fbd6cd26a3196a0d;hpb=c6540b9c89dda1a6a8bd681726831e8924176504 diff --git a/form/fty_num.c b/form/fty_num.c index 4bd71321..34cef636 100644 --- a/form/fty_num.c +++ b/form/fty_num.c @@ -1,5 +1,6 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * + * Copyright 2019-2020,2021 Thomas E. Dickey * + * Copyright 1998-2010,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 * @@ -34,13 +35,13 @@ #include "form.priv.h" -MODULE_ID("$Id: fty_num.c,v 1.28 2010/01/23 21:14:36 tom Exp $") +MODULE_ID("$Id: fty_num.c,v 1.37 2021/03/27 23:49:58 tom Exp $") #if HAVE_LOCALE_H #include #endif -#if HAVE_LOCALE_H +#if HAVE_LOCALE_H && HAVE_LOCALECONV #define isDecimalPoint(c) ((c) == ((L && L->decimal_point) ? *(L->decimal_point) : '.')) #else #define isDecimalPoint(c) ((c) == '.') @@ -82,8 +83,8 @@ thisPARM; static void * Generic_This_Type(void *arg) { - thisARG *argn = (thisARG *) 0; - thisPARM *args = (thisPARM *) arg; + thisARG *argn = (thisARG *)0; + thisPARM *args = (thisPARM *)arg; if (args) { @@ -96,7 +97,7 @@ Generic_This_Type(void *arg) argn->low = args->low; argn->high = args->high; -#if HAVE_LOCALE_H +#if HAVE_LOCALE_H && HAVE_LOCALECONV argn->L = localeconv(); #else argn->L = NULL; @@ -138,11 +139,12 @@ static void * Copy_This_Type(const void *argp) { const thisARG *ap = (const thisARG *)argp; - thisARG *result = (thisARG *) 0; + thisARG *result = (thisARG *)0; if (argp) { result = typeMalloc(thisARG, 1); + if (result) { T((T_CREATE("thisARG %p"), (void *)result)); @@ -186,12 +188,10 @@ Check_This_Field(FIELD *field, const void *argp) int prec = argn->precision; unsigned char *bp = (unsigned char *)field_buffer(field, 0); char *s = (char *)bp; - double val = 0.0; struct lconv *L = argn->L; - char buf[64]; bool result = FALSE; - while (*bp && *bp == ' ') + while (*bp == ' ') bp++; if (*bp) { @@ -200,14 +200,15 @@ Check_This_Field(FIELD *field, const void *argp) #if USE_WIDEC_SUPPORT if (*bp) { - bool blank = FALSE; - int state = 0; int len; - int n; wchar_t *list = _nc_Widen_String((char *)bp, &len); if (list != 0) { + bool blank = FALSE; + int state = 0; + int n; + result = TRUE; for (n = 0; n < len; ++n) { @@ -263,7 +264,8 @@ Check_This_Field(FIELD *field, const void *argp) #endif if (result) { - val = atof(s); + double val = atof(s); + if (low < high) { if (val < low || val > high) @@ -271,7 +273,10 @@ Check_This_Field(FIELD *field, const void *argp) } if (result) { - sprintf(buf, "%.*f", (prec > 0 ? prec : 0), val); + char buf[64]; + + _nc_SPRINTF(buf, _nc_SLIMIT(sizeof(buf)) + "%.*f", (prec > 0 ? prec : 0), val); set_field_buffer(field, 0, buf); } } @@ -322,14 +327,14 @@ static FIELDTYPE typeTHIS = #endif }; -NCURSES_EXPORT_VAR(FIELDTYPE*) TYPE_NUMERIC = &typeTHIS; +FORM_EXPORT_VAR(FIELDTYPE *) TYPE_NUMERIC = &typeTHIS; #if NCURSES_INTEROP_FUNCS /* The next routines are to simplify the use of ncurses from - programming languages with restictions on interop with C level + programming languages with restrictions on interop with C level constructs (e.g. variable access or va_list + ellipsis constructs) */ -NCURSES_EXPORT(FIELDTYPE *) +FORM_EXPORT(FIELDTYPE *) _nc_TYPE_NUMERIC(void) { return TYPE_NUMERIC;