FreeCalypso > hg > freecalypso-tools
view librftab/rdcommon.c @ 965:2969032bdfac
fcup-smsend[mult]: fix buglet in K&R C NULL pointer passing
The only 100% safe way to pass a NULL pointer as a function argument
in K&R C is to cast 0 to a pointer type; failing to do so may cause
mysterious bugs (invalid stack frames or garbage in argument registers)
on 64-bit machines. This issue has already been fixed in most of
FC host tools, but I just found some missed spots: passing of NULL UDH
to PDU encoding functions in fcup-smsend[mult] in the case of single
(not concatenated) SMS.
| author | Mychaela Falconia <falcon@freecalypso.org> |
|---|---|
| date | Fri, 01 Sep 2023 07:33:51 +0000 |
| parents | a0f79bba0ad8 |
| children |
line wrap: on
line source
/* * This C file is not a compilation unit in itself, but is the common piece * (a set of static variables and functions) included in the librftab modules * responsible for reading different kinds of ASCII tables. */ #define MAX_FIELDS_PER_LINE 64 static char *filename; static FILE *rdfile; static unsigned lineno; static char linebuf[256], *line_fields[MAX_FIELDS_PER_LINE]; static unsigned line_nfields, line_field_ptr; static int read_line() { char *cp; if (!fgets(linebuf, sizeof linebuf, rdfile)) return(0); lineno++; cp = linebuf; for (line_nfields = 0; ; ) { while (isspace(*cp)) cp++; if (*cp == '\0' || *cp == '#') break; if (line_nfields >= MAX_FIELDS_PER_LINE) { printf("%s line %d: too many fields on one line\n", filename, lineno); return(-1); } line_fields[line_nfields++] = cp; while (*cp && !isspace(*cp)) cp++; if (*cp) *cp++ = '\0'; } return(1); } static get_field(retp) char **retp; { int rc; if (line_field_ptr < line_nfields) { *retp = line_fields[line_field_ptr++]; return(1); } do { rc = read_line(); if (rc <= 0) return(rc); } while (!line_nfields); *retp = line_fields[0]; line_field_ptr = 1; return(1); }
