diff options
-rw-r--r-- | awk.h | 9 | ||||
-rw-r--r-- | b.c | 68 | ||||
-rw-r--r-- | lex.c | 6 | ||||
-rw-r--r-- | lib.c | 18 | ||||
-rw-r--r-- | maketab.c | 3 | ||||
-rw-r--r-- | parse.c | 2 | ||||
-rw-r--r-- | proto.h | 4 | ||||
-rw-r--r-- | run.c | 61 | ||||
-rw-r--r-- | tran.c | 23 |
9 files changed, 98 insertions, 96 deletions
@@ -30,7 +30,12 @@ typedef double Awkfloat; typedef unsigned char uschar; -#define xfree(a) { if ((a) != NULL) { free((void *) (a)); (a) = NULL; } } +#define xfree(a) { if ((a) != NULL) { free((void *)(intptr_t)(a)); (a) = NULL; } } +/* + * We sometimes cheat writing read-only pointers to NUL-terminate them + * and then put back the original value + */ +#define setptr(ptr, a) (*(char *)(intptr_t)(ptr)) = (a) #define NN(p) ((p) ? (p) : "(null)") /* guaranteed non-null for dprintf */ @@ -70,7 +75,7 @@ extern char inputFS[]; /* FS at time of input, for field splitting */ extern int dbg; -extern char *patbeg; /* beginning of pattern matched */ +extern const char *patbeg; /* beginning of pattern matched */ extern int patlen; /* length of pattern matched. set in b.c */ /* Cell: all information about a variable or constant */ @@ -61,19 +61,19 @@ int maxsetvec = 0; int rtok; /* next token in current re */ int rlxval; -static uschar *rlxstr; -static uschar *prestr; /* current position in current re */ -static uschar *lastre; /* origin of last re */ -static uschar *lastatom; /* origin of last Atom */ -static uschar *starttok; -static uschar *basestr; /* starts with original, replaced during +static const uschar *rlxstr; +static const uschar *prestr; /* current position in current re */ +static const uschar *lastre; /* origin of last re */ +static const uschar *lastatom; /* origin of last Atom */ +static const uschar *starttok; +static const uschar *basestr; /* starts with original, replaced during repetition processing */ -static uschar *firstbasestr; +static const uschar *firstbasestr; static int setcnt; static int poscnt; -char *patbeg; +const char *patbeg; int patlen; #define NFA 128 /* cache this many dynamic fa's */ @@ -185,7 +185,7 @@ fa *mkdfa(const char *s, int anchor) /* does the real work of making a dfa */ Node *p, *p1; fa *f; - firstbasestr = (uschar *) s; + firstbasestr = (const uschar *) s; basestr = firstbasestr; p = reparse(s); p1 = op2(CAT, op2(STAR, op2(ALL, NIL, NIL), NIL), p); @@ -195,7 +195,7 @@ fa *mkdfa(const char *s, int anchor) /* does the real work of making a dfa */ poscnt = 0; penter(p1); /* enter parent pointers and leaf indices */ - if ((f = (fa *) calloc(1, sizeof(fa) + poscnt*sizeof(rrow))) == NULL) + if ((f = calloc(1, sizeof(fa) + poscnt * sizeof(rrow))) == NULL) overflo(__func__); f->accept = poscnt-1; /* penter has computed number of positions in re */ cfoll(f, p1); /* set up follow sets */ @@ -295,13 +295,13 @@ void freetr(Node *p) /* free parse tree */ /* in the parsing of regular expressions, metacharacters like . have */ /* to be seen literally; \056 is not a metacharacter. */ -int hexstr(uschar **pp) /* find and eval hex string at pp, return new p */ +int hexstr(const uschar **pp) /* find and eval hex string at pp, return new p */ { /* only pick up one 8-bit byte (2 chars) */ - uschar *p; + const uschar *p; int n = 0; int i; - for (i = 0, p = (uschar *) *pp; i < 2 && isxdigit(*p); i++, p++) { + for (i = 0, p = *pp; i < 2 && isxdigit(*p); i++, p++) { if (isdigit(*p)) n = 16 * n + *p - '0'; else if (*p >= 'a' && *p <= 'f') @@ -309,16 +309,16 @@ int hexstr(uschar **pp) /* find and eval hex string at pp, return new p */ else if (*p >= 'A' && *p <= 'F') n = 16 * n + *p - 'A' + 10; } - *pp = (uschar *) p; + *pp = p; return n; } #define isoctdigit(c) ((c) >= '0' && (c) <= '7') /* multiple use of arg */ -int quoted(uschar **pp) /* pick up next thing after a \\ */ +int quoted(const uschar **pp) /* pick up next thing after a \\ */ /* and increment *pp */ { - uschar *p = *pp; + const uschar *p = *pp; int c; if ((c = *p++) == 't') @@ -356,8 +356,8 @@ int quoted(uschar **pp) /* pick up next thing after a \\ */ char *cclenter(const char *argp) /* add a character class */ { int i, c, c2; - uschar *p = (uschar *) argp; - uschar *op, *bp; + const uschar *op, *p = (const uschar *) argp; + uschar *bp; static uschar *buf = NULL; static int bufsz = 100; @@ -516,7 +516,7 @@ void follow(Node *v) /* collects leaves that can follow v into setvec */ int member(int c, const char *sarg) /* is c in s? */ { - uschar *s = (uschar *) sarg; + const uschar *s = (const uschar *) sarg; while (*s) if (c == *s++) @@ -527,7 +527,7 @@ int member(int c, const char *sarg) /* is c in s? */ int match(fa *f, const char *p0) /* shortest match ? */ { int s, ns; - uschar *p = (uschar *) p0; + const uschar *p = (const uschar *) p0; s = f->initstat; assert (s < f->state_count); @@ -549,13 +549,13 @@ int match(fa *f, const char *p0) /* shortest match ? */ int pmatch(fa *f, const char *p0) /* longest match, for sub */ { int s, ns; - uschar *p = (uschar *) p0; - uschar *q; + const uschar *p = (const uschar *) p0; + const uschar *q; s = f->initstat; assert(s < f->state_count); - patbeg = (char *)p; + patbeg = (const char *)p; patlen = -1; do { q = p; @@ -572,7 +572,7 @@ int pmatch(fa *f, const char *p0) /* longest match, for sub */ if (s == 1) { /* no transition */ if (patlen >= 0) { - patbeg = (char *) p; + patbeg = (const char *) p; return(1); } else @@ -582,7 +582,7 @@ int pmatch(fa *f, const char *p0) /* longest match, for sub */ if (f->out[s]) patlen = q-p-1; /* don't count $ */ if (patlen >= 0) { - patbeg = (char *) p; + patbeg = (const char *) p; return(1); } nextin: @@ -594,13 +594,13 @@ int pmatch(fa *f, const char *p0) /* longest match, for sub */ int nematch(fa *f, const char *p0) /* non-empty match, for sub */ { int s, ns; - uschar *p = (uschar *) p0; - uschar *q; + const uschar *p = (const uschar *) p0; + const uschar *q; s = f->initstat; assert(s < f->state_count); - patbeg = (char *)p; + patbeg = (const char *)p; patlen = -1; while (*p) { q = p; @@ -614,7 +614,7 @@ int nematch(fa *f, const char *p0) /* non-empty match, for sub */ s = cgoto(f, s, *q); if (s == 1) { /* no transition */ if (patlen > 0) { - patbeg = (char *) p; + patbeg = (const char *) p; return(1); } else goto nnextin; /* no nonempty match */ @@ -623,7 +623,7 @@ int nematch(fa *f, const char *p0) /* non-empty match, for sub */ if (f->out[s]) patlen = q-p-1; /* don't count $ */ if (patlen > 0 ) { - patbeg = (char *) p; + patbeg = (const char *) p; return(1); } nnextin: @@ -726,7 +726,7 @@ Node *reparse(const char *p) /* parses regular expression pointed to by p */ Node *np; dprintf( ("reparse <%s>\n", p) ); - lastre = prestr = (uschar *) p; /* prestr points to string to be parsed */ + lastre = prestr = (const uschar *) p; /* prestr points to string to be parsed */ rtok = relex(); /* GNU compatibility: an empty regexp matches anything */ if (rtok == '\0') { @@ -766,12 +766,12 @@ Node *primary(void) rtok = relex(); return (unary(op2(DOT, NIL, NIL))); case CCL: - np = op2(CCL, NIL, (Node*) cclenter((char *) rlxstr)); + np = op2(CCL, NIL, (Node*) cclenter((const char *) rlxstr)); lastatom = starttok; rtok = relex(); return (unary(np)); case NCCL: - np = op2(NCCL, NIL, (Node *) cclenter((char *) rlxstr)); + np = op2(NCCL, NIL, (Node *) cclenter((const char *) rlxstr)); lastatom = starttok; rtok = relex(); return (unary(np)); @@ -911,7 +911,7 @@ replace_repeat(const uschar *reptok, int reptoklen, const uschar *atom, int init_q = (firstnum==0); /* first added char will be ? */ int n_q_reps = secondnum-firstnum; /* m>n, so reduce until {1,m-n} left */ int prefix_length = reptok - basestr; /* prefix includes first rep */ - int suffix_length = strlen((char *) reptok) - reptoklen; /* string after rep specifier */ + int suffix_length = strlen((const char *) reptok) - reptoklen; /* string after rep specifier */ int size = prefix_length + suffix_length; if (firstnum > 1) { /* add room for reps 2 through firstnum */ @@ -173,7 +173,7 @@ int yylex(void) static char *buf = NULL; static int bufsize = 5; /* BUG: setting this small causes core dump! */ - if (buf == NULL && (buf = (char *) malloc(bufsize)) == NULL) + if (buf == NULL && (buf = malloc(bufsize)) == NULL) FATAL( "out of space in yylex" ); if (sc) { sc = 0; @@ -363,7 +363,7 @@ int string(void) static char *buf = NULL; static int bufsz = 500; - if (buf == NULL && (buf = (char *) malloc(bufsz)) == NULL) + if (buf == NULL && (buf = malloc(bufsz)) == NULL) FATAL("out of space for strings"); for (bp = buf; (c = input()) != '"'; ) { if (!adjbuf(&buf, &bufsz, bp-buf+2, 500, &bp, "string")) @@ -510,7 +510,7 @@ int regexpr(void) static int bufsz = 500; char *bp; - if (buf == NULL && (buf = (char *) malloc(bufsz)) == NULL) + if (buf == NULL && (buf = malloc(bufsz)) == NULL) FATAL("out of space for rex expr"); bp = buf; for ( ; (c = input()) != '/' && c != 0; ) { @@ -57,10 +57,10 @@ static Cell dollar1 = { OCELL, CFLD, NULL, "", 0.0, FLD|STR|DONTFREE }; void recinit(unsigned int n) { - if ( (record = (char *) malloc(n)) == NULL - || (fields = (char *) malloc(n+1)) == NULL - || (fldtab = (Cell **) malloc((nfields+2) * sizeof(Cell *))) == NULL - || (fldtab[0] = (Cell *) malloc(sizeof(Cell))) == NULL ) + if ( (record = malloc(n)) == NULL + || (fields = malloc(n+1)) == NULL + || (fldtab = calloc(nfields+2, sizeof(*fldtab))) == NULL + || (fldtab[0] = malloc(sizeof(**fldtab))) == NULL) FATAL("out of space for $0 and fields"); *record = '\0'; *fldtab[0] = dollar0; @@ -75,7 +75,7 @@ void makefields(int n1, int n2) /* create $n1..$n2 inclusive */ int i; for (i = n1; i <= n2; i++) { - fldtab[i] = (Cell *) malloc(sizeof (struct Cell)); + fldtab[i] = malloc(sizeof(**fldtab)); if (fldtab[i] == NULL) FATAL("out of space in makefields %d", i); *fldtab[i] = dollar1; @@ -215,7 +215,7 @@ int readrec(char **pbuf, int *pbufsize, FILE *inf) /* read one record into buf * fa *pfa = makedfa(rs, 1); found = fnematch(pfa, inf, &buf, &bufsize, recsize); if (found) - *patbeg = 0; + setptr(patbeg, '\0'); } else { if ((sep = *rs) == 0) { sep = '\n'; @@ -304,7 +304,7 @@ void fldbld(void) /* create fields from current record */ n = strlen(r); if (n > fieldssize) { xfree(fields); - if ((fields = (char *) malloc(n+2)) == NULL) /* possibly 2 final \0s */ + if ((fields = malloc(n+2)) == NULL) /* possibly 2 final \0s */ FATAL("out of space for fields in fldbld %d", n); fieldssize = n; } @@ -447,7 +447,7 @@ void growfldtab(int n) /* make new fields up to at least $n */ nf = n; s = (nf+1) * (sizeof (struct Cell *)); /* freebsd: how much do we need? */ if (s / sizeof(struct Cell *) - 1 == nf) /* didn't overflow */ - fldtab = (Cell **) realloc(fldtab, s); + fldtab = realloc(fldtab, s); else /* overflow sizeof int */ xfree(fldtab); /* make it null */ if (fldtab == NULL) @@ -467,7 +467,7 @@ int refldbld(const char *rec, const char *fs) /* build fields from reg expr in F n = strlen(rec); if (n > fieldssize) { xfree(fields); - if ((fields = (char *) malloc(n+1)) == NULL) + if ((fields = malloc(n+1)) == NULL) FATAL("out of space for fields in refldbld %d", n); fieldssize = n; } @@ -145,8 +145,7 @@ int main(int argc, char *argv[]) /* fprintf(stderr, "maketab funny token %d %s ignored\n", tok, buf); */ continue; } - names[tok-FIRSTTOKEN] = (char *) malloc(strlen(name)+1); - strcpy(names[tok-FIRSTTOKEN], name); + names[tok-FIRSTTOKEN] = strdup(name); printf("\t(char *) \"%s\",\t/* %d */\n", name, tok); i++; } @@ -33,7 +33,7 @@ Node *nodealloc(int n) { Node *x; - x = (Node *) malloc(sizeof(Node) + (n-1)*sizeof(Node *)); + x = malloc(sizeof(*x) + (n-1) * sizeof(x)); if (x == NULL) FATAL("out of space in nodealloc"); x->nnext = NULL; @@ -43,8 +43,8 @@ extern fa *mkdfa(const char *, int); extern int makeinit(fa *, int); extern void penter(Node *); extern void freetr(Node *); -extern int hexstr(uschar **); -extern int quoted(uschar **); +extern int hexstr(const uschar **); +extern int quoted(const uschar **); extern char *cclenter(const char *); extern void overflo(const char *) __attribute__((__noreturn__)); extern void cfoll(fa *, Node *); @@ -113,8 +113,8 @@ int adjbuf(char **pbuf, int *psiz, int minlen, int quantum, char **pbptr, /* round up to next multiple of quantum */ if (rminlen) minlen += quantum - rminlen; - tbuf = (char *) realloc(*pbuf, minlen); - dprintf( ("adjbuf %s: %d %d (pbuf=%p, tbuf=%p)\n", whatrtn, *psiz, minlen, (void *) *pbuf, (void *) tbuf) ); + tbuf = realloc(*pbuf, minlen); + dprintf( ("adjbuf %s: %d %d (pbuf=%p, tbuf=%p)\n", whatrtn, *psiz, minlen, *pbuf, tbuf) ); if (tbuf == NULL) { if (whatrtn) FATAL("out of memory in %s", whatrtn); @@ -236,7 +236,7 @@ Cell *call(Node **a, int n) /* function call. very kludgy and fragile */ if (!isfcn(fcn)) FATAL("calling undefined function %s", s); if (frame == NULL) { - fp = frame = (struct Frame *) calloc(nframe += 100, sizeof(struct Frame)); + fp = frame = calloc(nframe += 100, sizeof(*frame)); if (frame == NULL) FATAL("out of space for stack frames calling %s", s); } @@ -270,8 +270,7 @@ Cell *call(Node **a, int n) /* function call. very kludgy and fragile */ fp++; /* now ok to up frame */ if (fp >= frame + nframe) { int dfp = fp - frame; /* old index */ - frame = (struct Frame *) - realloc((char *) frame, (nframe += 100) * sizeof(struct Frame)); + frame = realloc(frame, (nframe += 100) * sizeof(*frame)); if (frame == NULL) FATAL("out of space for stack frames in %s", s); fp = frame + dfp; @@ -404,7 +403,7 @@ Cell *awkgetline(Node **a, int n) /* get next line from specific input */ int bufsize = recsize; int mode; - if ((buf = (char *) malloc(bufsize)) == NULL) + if ((buf = malloc(bufsize)) == NULL) FATAL("out of memory in getline"); fflush(stdout); /* in case someone is waiting for a prompt */ @@ -472,7 +471,7 @@ Cell *array(Node **a, int n) /* a[0] is symtab, a[1] is list of subscripts */ int bufsz = recsize; int nsub; - if ((buf = (char *) malloc(bufsz)) == NULL) + if ((buf = malloc(bufsz)) == NULL) FATAL("out of memory in array"); x = execute(a[0]); /* Cell* for symbol table */ @@ -525,7 +524,7 @@ Cell *awkdelete(Node **a, int n) /* a[0] is symtab, a[1] is list of subscripts * } else { int bufsz = recsize; char *buf; - if ((buf = (char *) malloc(bufsz)) == NULL) + if ((buf = malloc(bufsz)) == NULL) FATAL("out of memory in adelete"); buf[0] = 0; for (np = a[1]; np; np = np->nnext) { @@ -564,7 +563,7 @@ Cell *intest(Node **a, int n) /* a[0] is index (list), a[1] is symtab */ ap->tval |= ARR; ap->sval = (char *) makesymtab(NSYMTAB); } - if ((buf = (char *) malloc(bufsz)) == NULL) { + if ((buf = malloc(bufsz)) == NULL) { FATAL("out of memory in intest"); } buf[0] = 0; @@ -714,7 +713,7 @@ Cell *gettemp(void) /* get a tempcell */ Cell *x; if (!tmps) { - tmps = (Cell *) calloc(100, sizeof(Cell)); + tmps = calloc(100, sizeof(*tmps)); if (!tmps) FATAL("out of space for temporaries"); for (i = 1; i < 100; i++) @@ -850,7 +849,7 @@ int format(char **pbuf, int *pbufsize, const char *s, Node *a) /* printf-like co os = s; p = buf; - if ((fmt = (char *) malloc(fmtsz)) == NULL) + if ((fmt = malloc(fmtsz)) == NULL) FATAL("out of memory in format()"); while (*s) { adjbuf(&buf, &bufsize, MAXNUMSIZE+1+p-buf, recsize, &p, "format1"); @@ -991,7 +990,7 @@ Cell *awksprintf(Node **a, int n) /* sprintf(a[0]) */ char *buf; int bufsz=3*recsize; - if ((buf = (char *) malloc(bufsz)) == NULL) + if ((buf = malloc(bufsz)) == NULL) FATAL("out of memory in awksprintf"); y = a[0]->nnext; x = execute(a[0]); @@ -1014,7 +1013,7 @@ Cell *awkprintf(Node **a, int n) /* printf */ int len; int bufsz=3*recsize; - if ((buf = (char *) malloc(bufsz)) == NULL) + if ((buf = malloc(bufsz)) == NULL) FATAL("out of memory in awkprintf"); y = a[0]->nnext; x = execute(a[0]); @@ -1257,10 +1256,10 @@ Cell *dopa2(Node **a, int n) /* a[0], a[1] { a[2] } */ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */ { Cell *x = NULL, *y, *ap; - char *s, *origs; + const char *s, *origs, *t; char *fs = NULL, *origfs = NULL; int sep; - char *t, temp, num[50]; + char temp, num[50]; int n, tempstat, arg3type; y = execute(a[0]); /* source string */ @@ -1305,12 +1304,12 @@ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */ n++; sprintf(num, "%d", n); temp = *patbeg; - *patbeg = '\0'; + setptr(patbeg, '\0'); if (is_number(s)) setsymtab(num, s, atof(s), STR|NUM, (Array *) ap->sval); else setsymtab(num, s, 0.0, STR, (Array *) ap->sval); - *patbeg = temp; + setptr(patbeg, temp); s = patbeg + patlen; if (*(patbeg+patlen-1) == 0 || *s == 0) { n++; @@ -1343,13 +1342,13 @@ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */ s++; while (*s!=' ' && *s!='\t' && *s!='\n' && *s!='\0'); temp = *s; - *s = '\0'; + setptr(s, '\0'); sprintf(num, "%d", n); if (is_number(t)) setsymtab(num, t, atof(t), STR|NUM, (Array *) ap->sval); else setsymtab(num, t, 0.0, STR, (Array *) ap->sval); - *s = temp; + setptr(s, temp); if (*s != 0) s++; } @@ -1372,21 +1371,21 @@ Cell *split(Node **a, int nnn) /* split(a[0], a[1], a[2]); a[3] is type */ while (*s != sep && *s != '\n' && *s != '\0') s++; temp = *s; - *s = '\0'; + setptr(s, '\0'); sprintf(num, "%d", n); if (is_number(t)) setsymtab(num, t, atof(t), STR|NUM, (Array *) ap->sval); else setsymtab(num, t, 0.0, STR, (Array *) ap->sval); - *s = temp; + setptr(s, temp); if (*s++ == 0) break; } } tempfree(ap); tempfree(y); - free(origs); - free(origfs); + xfree(origs); + xfree(origfs); x = gettemp(); x->tval = NUM; x->fval = n; @@ -1828,13 +1827,13 @@ void flush_all(void) fflush(files[i].fp); } -void backsub(char **pb_ptr, char **sptr_ptr); +void backsub(char **pb_ptr, const char **sptr_ptr); Cell *sub(Node **a, int nnn) /* substitute command */ { - char *sptr, *pb, *q; + const char *sptr, *q; Cell *x, *y, *result; - char *t, *buf; + char *t, *buf, *pb; fa *pfa; int bufsz = recsize; @@ -1893,13 +1892,14 @@ Cell *sub(Node **a, int nnn) /* substitute command */ Cell *gsub(Node **a, int nnn) /* global substitute */ { Cell *x, *y; - char *rptr, *sptr, *t, *pb, *q; + char *rptr, *pb; + const char *q, *t, *sptr; char *buf; fa *pfa; int mflag, tempstat, num; int bufsz = recsize; - if ((buf = (char *) malloc(bufsz)) == NULL) + if ((buf = malloc(bufsz)) == NULL) FATAL("out of memory in gsub"); mflag = 0; /* if mflag == 0, can replace empty string */ num = 0; @@ -1991,9 +1991,10 @@ Cell *gsub(Node **a, int nnn) /* global substitute */ return(x); } -void backsub(char **pb_ptr, char **sptr_ptr) /* handle \\& variations */ +void backsub(char **pb_ptr, const char **sptr_ptr) /* handle \\& variations */ { /* sptr[0] == '\\' */ - char *pb = *pb_ptr, *sptr = *sptr_ptr; + char *pb = *pb_ptr; + const char *sptr = *sptr_ptr; if (sptr[1] == '\\') { if (sptr[2] == '\\' && sptr[3] == '&') { /* \\\& -> \& */ @@ -164,8 +164,8 @@ Array *makesymtab(int n) /* make a new symbol table */ Array *ap; Cell **tp; - ap = (Array *) malloc(sizeof(Array)); - tp = (Cell **) calloc(n, sizeof(Cell *)); + ap = malloc(sizeof(*ap)); + tp = calloc(n, sizeof(*tp)); if (ap == NULL || tp == NULL) FATAL("out of space in makesymtab"); ap->nelem = 0; @@ -235,7 +235,7 @@ Cell *setsymtab(const char *n, const char *s, Awkfloat f, unsigned t, Array *tp) (void*)p, NN(p->nval), NN(p->sval), p->fval, p->tval) ); return(p); } - p = (Cell *) malloc(sizeof(Cell)); + p = malloc(sizeof(*p)); if (p == NULL) FATAL("out of space for symbol table at %s", n); p->nval = tostring(n); @@ -270,7 +270,7 @@ void rehash(Array *tp) /* rehash items in small table into big one */ Cell *cp, *op, **np; nsz = GROWTAB * tp->size; - np = (Cell **) calloc(nsz, sizeof(Cell *)); + np = calloc(nsz, sizeof(*np)); if (np == NULL) /* can't do it, but can keep running. */ return; /* someone else will run out later. */ for (i = 0; i < tp->size; i++) { @@ -359,7 +359,7 @@ char *setsval(Cell *vp, const char *s) /* set string val of a Cell */ fldno = atoi(vp->nval); if (fldno > *NF) newfld(fldno); - dprintf( ("setting field %d to %s (%p)\n", fldno, s, (void *) s) ); + dprintf( ("setting field %d to %s (%p)\n", fldno, s, s) ); } else if (isrec(vp)) { donefld = 0; /* mark $1... invalid */ donerec = 1; @@ -376,7 +376,7 @@ char *setsval(Cell *vp, const char *s) /* set string val of a Cell */ vp->fmt = NULL; setfree(vp); dprintf( ("setsval %p: %s = \"%s (%p) \", t=%o r,f=%d,%d\n", - (void*)vp, NN(vp->nval), t, (void *) t, vp->tval, donerec, donefld) ); + (void*)vp, NN(vp->nval), t, t, vp->tval, donerec, donefld) ); vp->sval = t; if (&vp->fval == NF) { donerec = 0; /* mark $0 invalid */ @@ -490,7 +490,7 @@ static char *get_str_val(Cell *vp, char **fmt) /* get string val of a Cel } done: dprintf( ("getsval %p: %s = \"%s (%p)\", t=%o\n", - (void*)vp, NN(vp->nval), vp->sval, (void *) vp->sval, vp->tval) ); + (void*)vp, NN(vp->nval), vp->sval, vp->sval, vp->tval) ); return(vp->sval); } @@ -507,12 +507,9 @@ char *getpssval(Cell *vp) /* get string val of a Cell for print */ char *tostring(const char *s) /* make a copy of string s */ { - char *p; - - p = (char *) malloc(strlen(s)+1); + char *p = strdup(s); if (p == NULL) FATAL("out of space in tostring on %s", s); - strcpy(p, s); return(p); } @@ -536,10 +533,10 @@ char *qstring(const char *is, int delim) /* collect string up to next delim */ { const char *os = is; int c, n; - uschar *s = (uschar *) is; + const uschar *s = (const uschar *) is; uschar *buf, *bp; - if ((buf = (uschar *) malloc(strlen(is)+3)) == NULL) + if ((buf = malloc(strlen(is)+3)) == NULL) FATAL( "out of space in qstring(%s)", s); for (bp = buf; (c = *s) != delim; s++) { if (c == '\n') |