diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 1997-11-26 04:01:29 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 1997-11-26 04:01:29 +0000 |
commit | cd15e61d557c4704743905eae7b88ae927cf0394 (patch) | |
tree | 24ae93cd3ef24948fe6cc4049d94433f3ed28919 /lib/libform/fty_ipv4.c | |
parent | 65d9e3fdab3ed1511a98387720e59db078fc3d46 (diff) |
libform from ncurses 4.1. Post 4.1 patches to be applied in a separate commit.
Diffstat (limited to 'lib/libform/fty_ipv4.c')
-rw-r--r-- | lib/libform/fty_ipv4.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/lib/libform/fty_ipv4.c b/lib/libform/fty_ipv4.c new file mode 100644 index 00000000000..f3b18db0472 --- /dev/null +++ b/lib/libform/fty_ipv4.c @@ -0,0 +1,81 @@ + +/* + * THIS CODE IS SPECIFICALLY EXEMPTED FROM THE NCURSES PACKAGE COPYRIGHT. + * You may freely copy it for use as a template for your own field types. + * If you develop a field type that might be of general use, please send + * it back to the ncurses maintainers for inclusion in the next version. + */ +/*************************************************************************** +* * +* Author : Per Foreby, perf@efd.lth.se * +* * +***************************************************************************/ + +#include "form.priv.h" + +MODULE_ID("$Id: fty_ipv4.c,v 1.1 1997/11/26 04:01:25 millert Exp $") + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_IPV4_Field( +| FIELD * field, +| const void * argp) +| +| Description : Validate buffer content to be a valid IP number (Ver. 4) +| +| Return Values : TRUE - field is valid +| FALSE - field is invalid ++--------------------------------------------------------------------------*/ +static bool Check_IPV4_Field(FIELD * field, const void * argp GCC_UNUSED) +{ + char *bp = field_buffer(field,0); + int num = 0, len; + unsigned int d1, d2, d3, d4; + + if(isdigit(*bp)) /* Must start with digit */ + { + num = sscanf(bp, "%u.%u.%u.%u%n", &d1, &d2, &d3, &d4, &len); + if (num == 4) + { + bp += len; /* Make bp point to what sscanf() left */ + while (*bp && isspace(*bp)) + bp++; /* Allow trailing whitespace */ + } + } + return ((num != 4 || *bp || d1 > 255 || d2 > 255 + || d3 > 255 || d4 > 255) ? FALSE : TRUE); +} + +/*--------------------------------------------------------------------------- +| Facility : libnform +| Function : static bool Check_IPV4_Character( +| int c, +| const void *argp ) +| +| Description : Check a character for unsigned type or period. +| +| Return Values : TRUE - character is valid +| FALSE - character is invalid ++--------------------------------------------------------------------------*/ +static bool Check_IPV4_Character(int c, const void * argp GCC_UNUSED) +{ + return ((isdigit(c) || (c=='.')) ? TRUE : FALSE); +} + +static FIELDTYPE typeIPV4 = { + _RESIDENT, + 1, /* this is mutable, so we can't be const */ + (FIELDTYPE *)0, + (FIELDTYPE *)0, + NULL, + NULL, + NULL, + Check_IPV4_Field, + Check_IPV4_Character, + NULL, + NULL +}; + +FIELDTYPE* TYPE_IPV4 = &typeIPV4; + +/* fty_ipv4.c ends here */ |