=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/awk/run.c,v retrieving revision 1.7 retrieving revision 1.8 diff -c -r1.7 -r1.8 *** src/usr.bin/awk/run.c 1997/01/24 23:43:10 1.7 --- src/usr.bin/awk/run.c 1997/01/25 00:24:31 1.8 *************** *** 1,4 **** - /* $OpenBSD: run.c,v 1.7 1997/01/24 23:43:10 kstailey Exp $ */ /**************************************************************** Copyright (C) AT&T and Lucent Technologies 1996 All Rights Reserved --- 1,3 ---- *************** *** 719,734 **** return(z); } ! /* ! * printf-like conversions ! * returns len of buf or -1 on error ! */ ! int format(char *buf, int bufsize, char *s, Node *a) { char fmt[RECSIZE]; char *p, *t, *os; Cell *x; ! int flag = 0, len = 0, n; os = s; p = buf; --- 718,729 ---- return(z); } ! int format(char *buf, int bufsize, char *s, Node *a) /* printf-like conversions */ { char fmt[RECSIZE]; char *p, *t, *os; Cell *x; ! int flag = 0, n; os = s; p = buf; *************** *** 736,747 **** if (p - buf >= bufsize) return -1; if (*s != '%') { - len++; *p++ = *s++; continue; } if (*(s+1) == '%') { - len++; *p++ = '%'; s += 2; continue; --- 731,740 ---- *************** *** 791,797 **** a = a->nnext; switch (flag) { case 0: sprintf((char *)p, "%s", fmt); /* unknown, so dump it too */ - len += strlen(p); p += strlen(p); sprintf((char *)p, "%s", getsval(x)); break; --- 784,789 ---- *************** *** 807,828 **** sprintf((char *)p, (char *)fmt, t); break; case 5: ! isnum(x) ? ! (getfval(x) ? ! sprintf((char *)p, (char *)fmt, (int) getfval(x)) ! : len++) : sprintf((char *)p, (char *)fmt, getsval(x)[0]); break; } tempfree(x); - len += strlen(p); p += strlen(p); s++; } *p = '\0'; for ( ; a; a = a->nnext) /* evaluate any remaining args */ execute(a); ! return (len); } Cell *awksprintf(Node **a, int n) /* sprintf(a[0]) */ --- 799,816 ---- sprintf((char *)p, (char *)fmt, t); break; case 5: ! isnum(x) ? sprintf((char *)p, (char *)fmt, (int) getfval(x)) : sprintf((char *)p, (char *)fmt, getsval(x)[0]); break; } tempfree(x); p += strlen(p); s++; } *p = '\0'; for ( ; a; a = a->nnext) /* evaluate any remaining args */ execute(a); ! return 0; } Cell *awksprintf(Node **a, int n) /* sprintf(a[0]) */ *************** *** 849,868 **** Cell *x; Node *y; char buf[3*RECSIZE]; - int len; y = a[0]->nnext; x = execute(a[0]); ! if ((len = format(buf, sizeof buf, getsval(x), y)) == -1) ERROR "printf string %.30s... too long", buf FATAL; tempfree(x); if (a[1] == NULL) { ! if (write(1, buf, len) != len) ERROR "write error on stdout" FATAL; } else { fp = redirect((int)a[1], a[2]); ! ferror(fp); /* XXX paranoia */ ! if (write(fileno(fp), buf, len) != len) ERROR "write error on %s", filename(fp) FATAL; } return(true); --- 837,857 ---- Cell *x; Node *y; char buf[3*RECSIZE]; y = a[0]->nnext; x = execute(a[0]); ! if (format(buf, sizeof buf, getsval(x), y) == -1) ERROR "printf string %.30s... too long", buf FATAL; tempfree(x); if (a[1] == NULL) { ! fputs((char *)buf, stdout); ! if (ferror(stdout)) ERROR "write error on stdout" FATAL; } else { fp = redirect((int)a[1], a[2]); ! fputs((char *)buf, fp); ! fflush(fp); ! if (ferror(fp)) ERROR "write error on %s", filename(fp) FATAL; } return(true);