Index: src/file.c =================================================================== --- src/file.c (revision 1295) +++ src/file.c (revision 1296) @@ -115,7 +115,6 @@ /* --------------------------------------------------------------------------- * some local prototypes */ -static void PrintQuotedString(FILE *, char *); static void WritePCBInfoHeader(FILE *); static void WritePCBDataHeader(FILE *); static void WritePCBFontData(FILE *); @@ -509,18 +508,29 @@ /* --------------------------------------------------------------------------- * writes the quoted string created by another subroutine */ -static gds_t pqs_ds; -static void PrintQuotedString(FILE * FP, char *S) +void PrintQuotedString(FILE * FP, const char *S) { - gds_init(&pqs_ds); - gds_append_str(&pqs_ds, S); - fputs(pqs_ds.array, FP); + const char *start; + + fputc('"', FP); + for(start = S; *S != '\0'; S++) { + if (*S == '"' || *S == '\\') { + if (start != S) + fwrite(start, S-start, 1, FP); + fputc('\\', FP); + fputc(*S, FP); + start = S+1; + } + } + + if (start != S) + fwrite(start, S-start, 1, FP); + + fputc('"', FP); } void file_uninit() { - if (pqs_ds.array != NULL) - free(pqs_ds.array); } /* --------------------------------------------------------------------------- Index: src/file.h =================================================================== --- src/file.h (revision 1295) +++ src/file.h (revision 1296) @@ -74,6 +74,8 @@ #endif #endif +void PrintQuotedString(FILE *, const char *); + void file_uninit(); #endif Index: src/find.c =================================================================== --- src/find.c (revision 1295) +++ src/find.c (revision 1296) @@ -2438,12 +2438,14 @@ */ static void PrintElementNameList(ElementTypePtr Element, FILE * FP) { - static gds_t cname, pname, vname; - - CreateQuotedString(&cname, (char *) EMPTY(DESCRIPTION_NAME(Element))); - CreateQuotedString(&pname, (char *) EMPTY(NAMEONPCB_NAME(Element))); - CreateQuotedString(&vname, (char *) EMPTY(VALUE_NAME(Element))); - fprintf(FP, "(%s %s %s)\n", cname.array, pname.array, vname.array); + fputc('(', FP); + PrintQuotedString(FP, (char *) EMPTY(DESCRIPTION_NAME(Element))); + fputc(' ', FP); + PrintQuotedString(FP, (char *) EMPTY(NAMEONPCB_NAME(Element))); + fputc(' ', FP); + PrintQuotedString(FP, (char *) EMPTY(VALUE_NAME(Element))); + fputc(')', FP); + fputc('\n', FP); } /* --------------------------------------------------------------------------- @@ -2461,13 +2463,15 @@ */ static void PrintConnectionListEntry(char *ObjName, ElementTypePtr Element, bool FirstOne, FILE * FP) { - static gds_t oname; - - CreateQuotedString(&oname, ObjName); - if (FirstOne) - fprintf(FP, "\t%s\n\t{\n", oname.array); + if (FirstOne) { + fputc('\t', FP); + PrintQuotedString(FP, ObjName); + fprintf(FP, "\n\t{\n"); + } else { - fprintf(FP, "\t\t%s ", oname.array); + fprintf(FP, "\t\t"); + PrintQuotedString(FP, ObjName); + fputc(' ', FP); if (Element) PrintElementNameList(Element, FP); else @@ -2609,7 +2613,6 @@ { bool first = true; Cardinal number; - static gds_t oname; /* check all pins in element */ @@ -2637,8 +2640,9 @@ } /* write name to list and draw selected object */ - CreateQuotedString(&oname, (char *) EMPTY(pin->Name)); - fprintf(FP, "\t%s\n", oname.array); + fputc('\t', FP); + PrintQuotedString(FP, (char *) EMPTY(pin->Name)); + fputc('\n', FP); SET_FLAG(SELECTEDFLAG, pin); DrawPin(pin); } @@ -2677,8 +2681,10 @@ } /* write name to list and draw selected object */ - CreateQuotedString(&oname, (char *) EMPTY(pad->Name)); - fprintf(FP, "\t%s\n", oname.array); + fputc('\t', FP); + PrintQuotedString(FP, (char *) EMPTY(pad->Name)); + fputc('\n', FP); + SET_FLAG(SELECTEDFLAG, pad); DrawPad(pad); }