Clean up URL encoding and remove unused code
authorTom Hughes <tom@compton.nu>
Fri, 9 Sep 2011 23:39:05 +0000 (00:39 +0100)
committerTom Hughes <tom@compton.nu>
Fri, 9 Sep 2011 23:39:05 +0000 (00:39 +0100)
src/Makefile
src/interpolate.c
src/urlcode.c [deleted file]
src/urlcode.h [deleted file]

index c20b3fa..1917612 100644 (file)
@@ -34,7 +34,7 @@ CFLAGS += -I$(shell pg_config --includedir)
 LDFLAGS += -L$(shell pg_config --libdir) -lpq
 endif
 
-MAINOBJS := main.o gpx.o mercator.o image.o log.o db.o filename.o interpolate.o quadtile.o cache.o urlcode.o
+MAINOBJS := main.o gpx.o mercator.o image.o log.o db.o filename.o interpolate.o quadtile.o cache.o
 
 ALLOBJS := $(DB).o $(MAINOBJS)
 
index 5ca165f..5accb30 100644 (file)
@@ -3,7 +3,6 @@
  * GPX file importer, email interpolation
  *
  * Copyright Daniel Silverstone <dsilvers@digital-scurf.org>
- * Updated to encode URLs by Graham JOnes <grahamjones139@gmail.com> August 2011.
  *
  * Written for the OpenStreetMap project.
  *
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
+ *
+ * The URL encoding routines (to_hex and url_encode) are public domain
+ * and were derived from http://www.geekhideout.com/urlcode.shtml by
+ * Graham Jones <grahamjones139@gmail.com>.
  */
 
 #include <stdlib.h>
 #include <string.h>
 #include <limits.h>
 #include <inttypes.h>
+#include <ctype.h>
 
 #include <errno.h>
 
 #include "interpolate.h"
-#include "urlcode.h"
+
+static char
+to_hex(char c)
+{
+  static const char hex[] = "0123456789abcdef";
+
+  return hex[c & 15];
+}
+
+static char *
+url_encode(const char *str)
+{
+   const unsigned char *strptr = (const unsigned char *)str;
+  char *buf = malloc(strlen(str) * 3 + 1);
+  char *bufptr = buf;
+
+  while (*strptr) {
+    unsigned char c = *strptr++;
+
+    if (isalnum(c) || c == '-' || c == '_' || c == '.' || c == '~') {
+       *bufptr++ = c;
+    } else {
+       *bufptr++ = '%';
+       *bufptr++ = to_hex(c >> 4);
+       *bufptr++ = to_hex(c & 15);
+    }
+  }
+
+  *bufptr = '\0';
+
+  return buf;
+}
 
 static void
 do_interpolate(DBJob *job, FILE *input, FILE *output)
 {
   int c;
   char *usrEncStr;
-  
+
   while ((c = fgetc(input)) != EOF) {
     if (c != '%') {
       fputc(c, output);
@@ -107,7 +142,7 @@ interpolate(DBJob *job, const char *template)
 {
   FILE *outputfile, *inputfile;
   char inputpath[PATH_MAX];
-  
+
   if (getenv("GPX_INTERPOLATE_STDOUT") != NULL) {
     outputfile = stdout;
   } else {
@@ -123,18 +158,18 @@ interpolate(DBJob *job, const char *template)
       return;
     }
   }
-  
+
   snprintf(inputpath, PATH_MAX, "%s/%s", getenv("GPX_PATH_TEMPLATES"), template);
-  
+
   inputfile = fopen(inputpath, "rb");
-  
+
   if (inputfile == NULL) {
     ERROR("Unable to open input file %s (errno=%s)", inputpath, strerror(errno));
   } else {
     do_interpolate(job, inputfile, outputfile);
     fclose(inputfile);
   }
-  
+
   if (outputfile != stdout) {
     if (pclose(outputfile) == -1) {
       ERROR("Failure while closing sendmail! (errno=%s)", strerror(errno));
diff --git a/src/urlcode.c b/src/urlcode.c
deleted file mode 100644 (file)
index 826a6ab..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-/* URL Encoding code taken from http://www.geekhideout.com/urlcode.shtml
- * Minor change to prevent it encoding space as '+' and use '%20' instead.
- * Probably worth making this user selectable in the future - I think you need
- * to use %20 in URLs themselves, but '+' is ok in query strings.
- * I think this version will work for query strings though becuse %20 is valid.
- * 
- * Converted to simple library by adding urlcode.h by Graham Jones, 2011.
- *
- * This code is Public Domain (confirmed that the original author published it
- * without licence restrictions).
- */
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-
-/* Converts a hex character to its integer value */
-char from_hex(char ch) {
-  return isdigit(ch) ? ch - '0' : tolower(ch) - 'a' + 10;
-}
-
-/* Converts an integer value to its hex character*/
-char to_hex(char code) {
-  static char hex[] = "0123456789abcdef";
-  return hex[code & 15];
-}
-
-/* Returns a url-encoded version of str */
-/* IMPORTANT: be sure to free() the returned string after use */
-char *url_encode(char *str) {
-  char *pstr = str, *buf = malloc(strlen(str) * 3 + 1), *pbuf = buf;
-  while (*pstr) {
-    if (isalnum(*pstr) || *pstr == '-' || *pstr == '_' || *pstr == '.' || *pstr == '~') 
-      *pbuf++ = *pstr;
-    /*else if (*pstr == ' ') 
-     *pbuf++ = '+';*/
-    else 
-      *pbuf++ = '%', *pbuf++ = to_hex(*pstr >> 4), *pbuf++ = to_hex(*pstr & 15);
-    pstr++;
-  }
-  *pbuf = '\0';
-  return buf;
-}
-
-/* Returns a url-decoded version of str */
-/* IMPORTANT: be sure to free() the returned string after use */
-char *url_decode(char *str) {
-  char *pstr = str, *buf = malloc(strlen(str) + 1), *pbuf = buf;
-  while (*pstr) {
-    if (*pstr == '%') {
-      if (pstr[1] && pstr[2]) {
-        *pbuf++ = from_hex(pstr[1]) << 4 | from_hex(pstr[2]);
-        pstr += 2;
-      }
-    } else if (*pstr == '+') { 
-      *pbuf++ = ' ';
-    } else {
-      *pbuf++ = *pstr;
-    }
-    pstr++;
-  }
-  *pbuf = '\0';
-  return buf;
-}
diff --git a/src/urlcode.h b/src/urlcode.h
deleted file mode 100644 (file)
index 5de170d..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/* 
- * urlcode.h
- * Header file for functions to encode and decode URLs in urlcode.c
- *
- * Graham Jones, August 2011.
- *
- */
-#ifndef URLCODE_H
-#define URLCODE_H
-
-char from_hex(char ch);
-char tohex(char code);
-char *url_encode(char *str);
-char *url_decode(char *str);
-
-
-#endif /* URLCODE_H */