Browse Source

Add support for urlencoded on-calc file names.

git-svn-id: file:///var/svn/tigccpp/trunk@1162 9552661e-59e3-4036-b4f2-dbe53926924f
kevinkofler 17 years ago
parent
commit
5b3cacd8e7
1 changed files with 32 additions and 1 deletions
  1. 32 1
      tigcc/ld-tigcc/main.c

+ 32 - 1
tigcc/ld-tigcc/main.c

@@ -76,7 +76,38 @@ EXP_LINK_FILES ()
 #else /* !TARGET_EMBEDDED */
 static void DecodeOnCalcName(char *Dest, const char *Src)
 {
-	strncpy (Dest, Src, MAX_NAME_LEN);
+	COUNT Count = 0;
+	do {
+		if (*Src == '%'
+		    && ((Src[1] >= '0' && Src[1] <= '9')
+		        || (Src[1] >= 'A' && Src[1] <= 'F')
+		        || (Src[1] >= 'a' && Src[1] <= 'f'))
+		    && ((Src[2] >= '0' && Src[2] <= '9')
+		        || (Src[2] >= 'A' && Src[2] <= 'F')
+		        || (Src[2] >= 'a' && Src[2] <= 'f')))
+		{
+			char Src1 = *(++Src);
+			char Src2 = *(++Src);
+			if (Src1 >= '0' && Src1 <= '9')
+				Src1 -= '0';
+			else if (Src1 >= 'A' && Src1 <= 'F')
+				Src1 += (10 - 'A');
+			else if (Src1 >= 'a' && Src1 <= 'f')
+				Src1 += (10 - 'a');
+			if (Src2 >= '0' && Src2 <= '9')
+				Src2 -= '0';
+			else if (Src2 >= 'A' && Src2 <= 'F')
+				Src2 += (10 - 'A');
+			else if (Src2 >= 'a' && Src2 <= 'f')
+				Src2 += (10 - 'a');
+			*(Dest++) = (Src1 << 4) + Src2;
+			Src++;
+		}
+		else if (*Src)
+			*(Dest++) = *(Src++);
+		else
+			break;
+	} while (++Count < MAX_NAME_LEN);
 }
 
 // Maps uppercase characters in the calculator charset to lowercase.