--- ray/src/gen/xform.c 2003/11/16 09:23:46 2.35 +++ ray/src/gen/xform.c 2009/07/26 18:34:59 2.41 @@ -1,5 +1,5 @@ #ifndef lint -static const char RCSid[] = "$Id: xform.c,v 2.35 2003/11/16 09:23:46 schorsch Exp $"; +static const char RCSid[] = "$Id: xform.c,v 2.41 2009/07/26 18:34:59 greg Exp $"; #endif /* * xform.c - program to transform object files. @@ -54,7 +54,7 @@ static void xfcomm(char *fname, FILE *fin); static void xfobject(char *fname, FILE *fin); static int addxform(FILE *fin); static int alias(FILE *fin); -static void initotypes(void); +void initotypes(void); /* XXX conflict with otypes.h */ static void openmain(char *iname); @@ -181,8 +181,8 @@ doargf( /* take argument list from file */ { int inquote; char *newav[256], **avp; - char argbuf[1024]; - char newid[128]; + char argbuf[2048]; + char *newid, newidbuf[128]; char *oldid; register char *cp; FILE *argfp; @@ -258,17 +258,23 @@ doargf( /* take argument list from file */ for (i = fi+2; i < ac; i++) avp[newac++] = av[i]; avp[newac] = NULL; - oldid = NULL; + newid = oldid = NULL; for (i = 2; i < newac; i++) if (!strcmp(avp[i-1], "-n")) { oldid = avp[i]; + newid = newidbuf; + if (strlen(oldid)+32 > sizeof(newidbuf)) { + newid = (char *)malloc(strlen(oldid)+32); + if (newid == NULL) + exit(2); + } avp[i] = newid; break; } if (oldid == NULL) { newav[0] = av[0]; newav[1] = "-n"; - newav[2] = newid; + newav[2] = newid = newidbuf; avp = newav; newac += 2; } @@ -277,6 +283,8 @@ doargf( /* take argument list from file */ else sprintf(newid, "%s.%d", oldid, k); err |= main(newac, avp); + if (newid != NULL && newid != newidbuf) + free((void *)newid); k++; } fclose(argfp); @@ -374,7 +382,7 @@ xfcomm( /* transform a command */ ) { FILE *pin; - char buf[512]; + char buf[2048]; int i; fgetline(buf, sizeof(buf), fin); @@ -416,17 +424,24 @@ xfobject( /* transform an object */ progname, fname, typ); exit(1); } - if (ismodifier(fn)) - printf("\n%s %s ", nam, typ); - else - printf("\n%s %s ", newmod != NULL ? newmod : nam, - invert ? ofun[tinvers[fn]].funame : typ); + putchar('\n'); + if (ismodifier(fn)) { + fputword(nam, stdout); + printf(" %s ", typ); + } else { + fputword(newmod != NULL ? newmod : nam, stdout); + printf(" %s ", invert ? ofun[tinvers[fn]].funame : typ); + } /* object name */ fgetword(nam, sizeof(nam), fin); if (idprefix == NULL || ismodifier(fn)) - printf("%s\n", nam); - else - printf("%s.%s\n", idprefix, nam); + fputword(nam, stdout); + else { + char nnam[MAXSTR]; + sprintf(nnam, "%s.%s", idprefix, nam); + fputword(nnam, stdout); + } + putchar('\n'); /* transform arguments */ if ((*ofun[fn].funp)(fin) < 0) { fprintf(stderr, "%s: (%s): bad %s \"%s\"\n",