Blob Blame History Raw
diff -Nur fontforge-20090923.orig/gutils/fsys.c fontforge-20090923/gutils/fsys.c
--- fontforge-20090923.orig/gutils/fsys.c	2009-01-25 11:06:49.000000000 -0700
+++ fontforge-20090923/gutils/fsys.c	2009-12-31 09:59:54.000000000 -0700
@@ -41,6 +41,15 @@
 
 static char dirname_[1024];
 
+static void savestrcpy(char *dest,const char *src) {
+    forever {
+       *dest = *src;
+       if ( *dest=='\0' )
+    break;
+       ++dest; ++src;
+    }
+}
+
 char *GFileGetAbsoluteName(char *name, char *result, int rsiz) {
     /* result may be the same as name */
     char buffer[1000];
@@ -62,13 +71,13 @@
 	    if ( *spt=='/' ) ++spt;
 	    for ( pt = spt; *pt!='\0' && *pt!='/'; ++pt );
 	    if ( pt==spt )	/* Found // in a path spec, reduce to / (we've*/
-		strcpy(spt,pt); /*  skipped past the :// of the machine name) */
-	    else if ( pt==spt+1 && spt[0]=='.' )	/* Noop */
-		strcpy(spt,pt);
-	    else if ( pt==spt+2 && spt[0]=='.' && spt[1]=='.' ) {
+               savestrcpy(spt,spt+1); /*  skipped past the :// of the machine name) */
+            else if ( pt==spt+1 && spt[0]=='.' ) {      /* Noop */
+               savestrcpy(spt,spt+2);
+            } else if ( pt==spt+2 && spt[0]=='.' && spt[1]=='.' ) {
 		for ( bpt=spt-2 ; bpt>rpt && *bpt!='/'; --bpt );
 		if ( bpt>=rpt && *bpt=='/' ) {
-		    strcpy(bpt,pt);
+                    savestrcpy(bpt,pt);
 		    spt = bpt;
 		} else {
 		    rpt = pt;
@@ -99,7 +108,7 @@
 
     if ( dir==NULL || *dir=='\0' ) {
 	if ( strlen( fname )<size-1 )		/* valgrind didn't like my strncpies but this complication makes it happy */
-	    strcpy(buffer,fname);
+            savestrcpy(buffer,fname);
 	else {
 	    strncpy(buffer,fname,size-1);
 	    buffer[size-1]='\0';