curl tool: reviewed code moved to tool_*.[ch] files
authorYang Tse <yangsita@gmail.com>
Wed, 5 Oct 2011 18:16:16 +0000 (20:16 +0200)
committerYang Tse <yangsita@gmail.com>
Wed, 5 Oct 2011 18:16:16 +0000 (20:16 +0200)
packages/Symbian/group/curl.mmp
src/Makefile.inc
src/Makefile.vc6
src/tool_operate.c
src/tool_urlglob.c [moved from src/urlglob.c with 83% similarity]
src/tool_urlglob.h [moved from src/urlglob.h with 88% similarity]
src/vc6curlsrc.dsp

index 0f548c6..22bb5c0 100644 (file)
@@ -8,7 +8,7 @@ UID           0x00000000 0xF0206442
 
 SOURCEPATH  ../../../src
 SOURCE \
-    hugehelp.c urlglob.c writeout.c writeenv.c \
+    hugehelp.c writeout.c writeenv.c \
     getpass.c homedir.c curlutil.c xattr.c \
     tool_binmode.c \
     tool_bname.c \
@@ -39,6 +39,7 @@ SOURCE \
     tool_parsecfg.c \
     tool_setopt.c \
     tool_sleep.c \
+    tool_urlglob.c \
     tool_vms.c
 
 SOURCEPATH  ../../../lib
index af6f6b4..d2ee0e6 100644 (file)
@@ -14,7 +14,7 @@ CURLX_ONES = $(top_srcdir)/lib/strtoofft.c \
        $(top_srcdir)/lib/rawstr.c \
        $(top_srcdir)/lib/nonblock.c
 
-CURL_CFILES = hugehelp.c urlglob.c writeout.c writeenv.c \
+CURL_CFILES = hugehelp.c writeout.c writeenv.c \
        getpass.c homedir.c curlutil.c xattr.c \
        tool_binmode.c \
        tool_bname.c \
@@ -45,10 +45,11 @@ CURL_CFILES = hugehelp.c urlglob.c writeout.c writeenv.c \
        tool_parsecfg.c \
        tool_setopt.c \
        tool_sleep.c \
+       tool_urlglob.c \
        tool_vms.c
 
 CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \
-       config-riscos.h urlglob.h version.h xattr.h \
+       config-riscos.h version.h xattr.h \
        writeout.h writeenv.h getpass.h homedir.h curlutil.h \
        tool_binmode.h \
        tool_bname.h \
@@ -80,6 +81,7 @@ CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \
        tool_sdecls.h \
        tool_setopt.h \
        tool_sleep.h \
+       tool_urlglob.h \
        tool_vms.h
 
 curl_SOURCES = $(CURL_CFILES) $(CURLX_ONES) $(CURL_HFILES)
index 5cec77a..fe03afe 100644 (file)
@@ -169,8 +169,8 @@ RELEASE_OBJS= \
        tool_parsecfgr.obj \\r
        tool_setoptr.obj \\r
        tool_sleepr.obj \\r
+       tool_urlglobr.obj \\r
        tool_vmsr.obj \\r
-       urlglobr.obj \\r
        writeoutr.obj \\r
        xattrr.obj \\r
        curlr.res\r
@@ -212,8 +212,8 @@ DEBUG_OBJS= \
        tool_parsecfgd.obj \\r
        tool_setoptd.obj \\r
        tool_sleepd.obj \\r
+       tool_urlglobd.obj \\r
        tool_vmsd.obj \\r
-       urlglobd.obj \\r
        writeoutd.obj \\r
        xattrd.obj \\r
        curld.res\r
@@ -342,8 +342,6 @@ hugehelpr.obj: hugehelp.c
        $(CCR) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c\r
 writeoutr.obj: writeout.c\r
        $(CCR) $(CFLAGS) /Fo"$@" writeout.c\r
-urlglobr.obj: urlglob.c\r
-       $(CCR) $(CFLAGS) /Fo"$@" urlglob.c\r
 getpassr.obj: getpass.c\r
        $(CCR) $(CFLAGS) /Fo"$@" getpass.c\r
 homedirr.obj: homedir.c\r
@@ -414,6 +412,8 @@ tool_setoptr.obj: tool_setopt.c
        $(CCR) $(CFLAGS) /Fo"$@" tool_setopt.c\r
 tool_sleepr.obj: tool_sleep.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobr.obj: tool_urlglob.c\r
+       $(CCR) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
 tool_vmsr.obj: tool_vms.c\r
        $(CCR) $(CFLAGS) /Fo"$@" tool_vms.c\r
 xattrr.obj: xattr.c\r
@@ -426,8 +426,6 @@ hugehelpd.obj: hugehelp.c
        $(CCD) $(CFLAGS) /Zm200 /Fo"$@" hugehelp.c\r
 writeoutd.obj: writeout.c\r
        $(CCD) $(CFLAGS) /Fo"$@" writeout.c\r
-urlglobd.obj: urlglob.c\r
-       $(CCD) $(CFLAGS) /Fo"$@" urlglob.c\r
 getpassd.obj: getpass.c\r
        $(CCD) $(CFLAGS) /Fo"$@" getpass.c\r
 homedird.obj: homedir.c\r
@@ -498,6 +496,8 @@ tool_setoptd.obj: tool_setopt.c
        $(CCD) $(CFLAGS) /Fo"$@" tool_setopt.c\r
 tool_sleepd.obj: tool_sleep.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_sleep.c\r
+tool_urlglobd.obj: tool_urlglob.c\r
+       $(CCD) $(CFLAGS) /Fo"$@" tool_urlglob.c\r
 tool_vmsd.obj: tool_vms.c\r
        $(CCD) $(CFLAGS) /Fo"$@" tool_vms.c\r
 xattrd.obj: xattr.c\r
index d4671eb..b7da80a 100644 (file)
@@ -49,7 +49,6 @@
 
 #include "curlutil.h"
 #include "homedir.h"
-#include "urlglob.h"
 #include "writeout.h"
 #include "xattr.h"
 
@@ -79,6 +78,7 @@
 #include "tool_parsecfg.h"
 #include "tool_setopt.h"
 #include "tool_sleep.h"
+#include "tool_urlglob.h"
 
 #include "memdebug.h" /* keep this as LAST include */
 
similarity index 83%
rename from src/urlglob.c
rename to src/tool_urlglob.c
index aa870d8..108fc39 100644 (file)
 #define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */
 #include <curl/mprintf.h>
 
-#include "urlglob.h"
+#include "tool_urlglob.h"
 #include "tool_vms.h"
 
 #include "memdebug.h" /* keep this as LAST include */
 
 typedef enum {
   GLOB_OK,
+  GLOB_NO_MEM,
   GLOB_ERROR
 } GlobCode;
 
@@ -53,11 +54,12 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
   /* processes a set expression with the point behind the opening '{'
      ','-separated elements are collected until the next closing '}'
   */
+  URLPattern *pat;
+  GlobCode res;
   bool done = FALSE;
   char* buf = glob->glob_buffer;
-  URLPattern *pat;
 
-  pat = (URLPattern*)&glob->pattern[glob->size / 2];
+  pat = &glob->pattern[glob->size / 2];
   /* patterns 0,1,2,... correspond to size=1,3,5,... */
   pat->type = UPTSet;
   pat->content.Set.size = 0;
@@ -98,8 +100,8 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
       else
         pat->content.Set.elements = malloc(sizeof(char*));
       if(!pat->content.Set.elements) {
-        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory");
-        return GLOB_ERROR;
+        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
+        return GLOB_NO_MEM;
       }
       pat->content.Set.elements[pat->content.Set.size] =
         strdup(glob->glob_buffer);
@@ -110,8 +112,8 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
         Curl_safefree(pat->content.Set.elements);
         pat->content.Set.ptr_s = 0;
         pat->content.Set.size = 0;
-        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory");
-        return GLOB_ERROR;
+        snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
+        return GLOB_NO_MEM;
       }
       ++pat->content.Set.size;
 
@@ -120,8 +122,17 @@ static GlobCode glob_set(URLGlob *glob, char *pattern,
         int wordamount;
 
         /* always check for a literal (may be "") between patterns */
-        if(GLOB_ERROR == glob_word(glob, ++pattern, ++pos, &wordamount))
-          return GLOB_ERROR;
+        res = glob_word(glob, ++pattern, ++pos, &wordamount);
+        if(res) {
+          short elem;
+          for(elem = 0; elem < pat->content.Set.size; elem++)
+            Curl_safefree(pat->content.Set.elements[elem]);
+          Curl_safefree(pat->content.Set.elements);
+          pat->content.Set.ptr_s = 0;
+          pat->content.Set.size = 0;
+          return res;
+        }
+
         *amount = pat->content.Set.size * wordamount;
 
         done = TRUE;
@@ -163,22 +174,26 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
   */
   URLPattern *pat;
   char *c;
-  int wordamount=1;
   char sep;
   char sep2;
   int step;
   int rc;
+  GlobCode res;
+  int wordamount = 1;
 
-  pat = (URLPattern*)&glob->pattern[glob->size / 2];
+  pat = &glob->pattern[glob->size / 2];
   /* patterns 0,1,2,... correspond to size=1,3,5,... */
   ++glob->size;
 
-  if(ISALPHA(*pattern)) {         /* character range detected */
+  if(ISALPHA(*pattern)) {
+    /* character range detected */
     char min_c;
     char max_c;
 
     pat->type = UPTCharRange;
+
     rc = sscanf(pattern, "%c-%c%c%d%c", &min_c, &max_c, &sep, &step, &sep2);
+
     if((rc < 3) || (min_c >= max_c) || ((max_c - min_c) > ('z' - 'a'))) {
       /* the pattern is not well-formed */
       snprintf(glob->errormsg, sizeof(glob->errormsg),
@@ -196,12 +211,13 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
 
     /* if there was a ":[num]" thing, use that as step or else use 1 */
     pat->content.CharRange.step =
-      ((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1;
+      ((sep == ':') && (rc == 5) && (sep2 == ']')) ? step : 1;
 
     pat->content.CharRange.ptr_c = pat->content.CharRange.min_c = min_c;
     pat->content.CharRange.max_c = max_c;
   }
-  else if(ISDIGIT(*pattern)) { /* numeric range detected */
+  else if(ISDIGIT(*pattern)) {
+    /* numeric range detected */
     int min_n;
     int max_n;
 
@@ -216,14 +232,15 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
                "error: bad range specification after pos %zu\n", pos);
       return GLOB_ERROR;
     }
-    pat->content.NumRange.ptr_n =  pat->content.NumRange.min_n = min_n;
+    pat->content.NumRange.ptr_n = pat->content.NumRange.min_n = min_n;
     pat->content.NumRange.max_n = max_n;
 
     /* if there was a ":[num]" thing, use that as step or else use 1 */
     pat->content.NumRange.step =
-      ((sep == ':') && (rc == 5) && (sep2 == ']'))?step:1;
+      ((sep == ':') && (rc == 5) && (sep2 == ']')) ? step : 1;
 
-    if(*pattern == '0') {              /* leading zero specified */
+    if(*pattern == '0') {
+      /* leading zero specified */
       c = pattern;
       while(ISDIGIT(*c)) {
         c++;
@@ -231,7 +248,6 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
                                               instances of this pattern */
       }
     }
-
   }
   else {
     snprintf(glob->errormsg, sizeof(glob->errormsg),
@@ -249,18 +265,22 @@ static GlobCode glob_range(URLGlob *glob, char *pattern,
 
   /* always check for a literal (may be "") between patterns */
 
-  if(GLOB_ERROR == glob_word(glob, c, pos + (c - pattern), &wordamount))
+  res = glob_word(glob, c, pos + (c - pattern), &wordamount);
+  if(res == GLOB_ERROR) {
     wordamount = 1;
+    res = GLOB_OK;
+  }
 
-  if(pat->type == UPTCharRange)
-    *amount = (pat->content.CharRange.max_c -
-               pat->content.CharRange.min_c + 1) *
-      wordamount;
-  else
-    *amount = (pat->content.NumRange.max_n -
-               pat->content.NumRange.min_n + 1) * wordamount;
+  if(!res) {
+    if(pat->type == UPTCharRange)
+      *amount = wordamount * (pat->content.CharRange.max_c -
+                              pat->content.CharRange.min_c + 1);
+    else
+      *amount = wordamount * (pat->content.NumRange.max_n -
+                              pat->content.NumRange.min_n + 1);
+  }
 
-  return GLOB_OK;
+  return res; /* GLOB_OK or GLOB_NO_MEM */
 }
 
 static GlobCode glob_word(URLGlob *glob, char *pattern,
@@ -291,20 +311,23 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
       ++pattern;
       ++pos;
     }
-    *buf++ = *pattern++;                /* copy character to literal */
+    *buf++ = *pattern++; /* copy character to literal */
     ++pos;
   }
   *buf = '\0';
   litindex = glob->size / 2;
   /* literals 0,1,2,... correspond to size=0,2,4,... */
   glob->literal[litindex] = strdup(glob->glob_buffer);
-  if(!glob->literal[litindex])
-    return GLOB_ERROR;
+  if(!glob->literal[litindex]) {
+    snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory\n");
+    return GLOB_NO_MEM;
+  }
   ++glob->size;
 
   switch (*pattern) {
   case '\0':
-    break;                      /* singular URL processed  */
+    /* singular URL processed  */
+    break;
 
   case '{':
     /* process set pattern */
@@ -313,15 +336,14 @@ static GlobCode glob_word(URLGlob *glob, char *pattern,
 
   case '[':
     /* process range pattern */
-    res= glob_range(glob, ++pattern, ++pos, amount);
+    res = glob_range(glob, ++pattern, ++pos, amount);
     break;
   }
 
-  if(GLOB_OK != res)
-    /* free that strdup'ed string again */
+  if(res)
     Curl_safefree(glob->literal[litindex]);
 
-  return res; /* something got wrong */
+  return res;
 }
 
 int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
@@ -332,34 +354,40 @@ int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error)
    */
   URLGlob *glob_expand;
   int amount;
-  char *glob_buffer = malloc(strlen(url)+1);
+  char *glob_buffer;
+  GlobCode res;
 
   *glob = NULL;
-  if(NULL == glob_buffer)
+
+  glob_buffer = malloc(strlen(url) + 1);
+  if(!glob_buffer)
     return CURLE_OUT_OF_MEMORY;
 
   glob_expand = calloc(1, sizeof(URLGlob));
-  if(NULL == glob_expand) {
+  if(!glob_expand) {
     Curl_safefree(glob_buffer);
     return CURLE_OUT_OF_MEMORY;
   }
   glob_expand->size = 0;
   glob_expand->urllen = strlen(url);
   glob_expand->glob_buffer = glob_buffer;
-  glob_expand->beenhere=0;
-  if(GLOB_OK == glob_word(glob_expand, url, 1, &amount))
+  glob_expand->beenhere = 0;
+
+  res = glob_word(glob_expand, url, 1, &amount);
+  if(!res)
     *urlnum = amount;
   else {
     if(error && glob_expand->errormsg[0]) {
       /* send error description to the error-stream */
       fprintf(error, "curl: (%d) [globbing] %s",
-              CURLE_URL_MALFORMAT, glob_expand->errormsg);
+              (res == GLOB_NO_MEM) ? CURLE_OUT_OF_MEMORY : CURLE_URL_MALFORMAT,
+              glob_expand->errormsg);
     }
     /* it failed, we cleanup */
     Curl_safefree(glob_buffer);
     Curl_safefree(glob_expand);
     *urlnum = 1;
-    return CURLE_URL_MALFORMAT;
+    return (res == GLOB_NO_MEM) ? CURLE_OUT_OF_MEMORY : CURLE_URL_MALFORMAT;
   }
 
   *glob = glob_expand;
@@ -381,8 +409,7 @@ void glob_cleanup(URLGlob* glob)
         for(elem = glob->pattern[i/2].content.Set.size - 1;
              elem >= 0;
              --elem) {
-          if(glob->pattern[i/2].content.Set.elements[elem])
-            Curl_safefree(glob->pattern[i/2].content.Set.elements[elem]);
+          Curl_safefree(glob->pattern[i/2].content.Set.elements[elem]);
         }
         Curl_safefree(glob->pattern[i/2].content.Set.elements);
       }
@@ -394,13 +421,13 @@ void glob_cleanup(URLGlob* glob)
 
 char *glob_next_url(URLGlob *glob)
 {
-  char *buf = glob->glob_buffer;
   URLPattern *pat;
   char *lit;
   size_t i;
   size_t j;
-  size_t buflen = glob->urllen+1;
   size_t len;
+  size_t buflen = glob->urllen + 1;
+  char *buf = glob->glob_buffer;
 
   if(!glob->beenhere)
     glob->beenhere = 1;
@@ -409,7 +436,7 @@ char *glob_next_url(URLGlob *glob)
 
     /* implement a counter over the index ranges of all patterns,
        starting with the rightmost pattern */
-    for(i = glob->size / 2 - 1; carry && i < glob->size; --i) {
+    for(i = glob->size / 2 - 1; carry && (i < glob->size); --i) {
       carry = FALSE;
       pat = &glob->pattern[i];
       switch (pat->type) {
@@ -487,19 +514,19 @@ char *glob_match_url(char *filename, URLGlob *glob)
 {
   char *target;
   size_t allocsize;
-  size_t stringlen=0;
   char numbuf[18];
   char *appendthis = NULL;
   size_t appendlen = 0;
+  size_t stringlen = 0;
 
   /* We cannot use the glob_buffer for storage here since the filename may
    * be longer than the URL we use. We allocate a good start size, then
    * we need to realloc in case of need.
    */
-  allocsize=strlen(filename)+1; /* make it at least one byte to store the
-                                   trailing zero */
+  allocsize = strlen(filename) + 1; /* make it at least one byte to store the
+                                       trailing zero */
   target = malloc(allocsize);
-  if(NULL == target)
+  if(!target)
     return NULL; /* major failure */
 
   while(*filename) {
@@ -507,7 +534,7 @@ char *glob_match_url(char *filename, URLGlob *glob)
       unsigned long i;
       char *ptr = filename;
       unsigned long num = strtoul(&filename[1], &filename, 10);
-      i = num-1;
+      i = num - 1UL;
 
       if(num && (i <= glob->size / 2)) {
         URLPattern pat = glob->pattern[i];
@@ -520,10 +547,10 @@ char *glob_match_url(char *filename, URLGlob *glob)
           }
           break;
         case UPTCharRange:
-          numbuf[0]=pat.content.CharRange.ptr_c;
-          numbuf[1]=0;
-          appendthis=numbuf;
-          appendlen=1;
+          numbuf[0] = pat.content.CharRange.ptr_c;
+          numbuf[1] = 0;
+          appendthis = numbuf;
+          appendlen = 1;
           break;
         case UPTNumRange:
           snprintf(numbuf, sizeof(numbuf), "%0*d",
@@ -542,25 +569,25 @@ char *glob_match_url(char *filename, URLGlob *glob)
       else {
         /* #[num] out of range, use the #[num] in the output */
         filename = ptr;
-        appendthis=filename++;
-        appendlen=1;
+        appendthis = filename++;
+        appendlen = 1;
       }
     }
     else {
-      appendthis=filename++;
-      appendlen=1;
+      appendthis = filename++;
+      appendlen = 1;
     }
     if(appendlen + stringlen >= allocsize) {
       char *newstr;
       /* we append a single byte to allow for the trailing byte to be appended
          at the end of this function outside the while() loop */
-      allocsize = (appendlen + stringlen)*2;
-      newstr=realloc(target, allocsize + 1);
-      if(NULL ==newstr) {
+      allocsize = (appendlen + stringlen) * 2;
+      newstr = realloc(target, allocsize + 1);
+      if(!newstr) {
         Curl_safefree(target);
         return NULL;
       }
-      target=newstr;
+      target = newstr;
     }
     memcpy(&target[stringlen], appendthis, appendlen);
     stringlen += appendlen;
similarity index 88%
rename from src/urlglob.h
rename to src/tool_urlglob.h
index 44681ea..cf54a9b 100644 (file)
@@ -1,5 +1,5 @@
-#ifndef HEADER_CURL_URLGLOB_H
-#define HEADER_CURL_URLGLOB_H
+#ifndef HEADER_CURL_TOOL_URLGLOB_H
+#define HEADER_CURL_TOOL_URLGLOB_H
 /***************************************************************************
  *                                  _   _ ____  _
  *  Project                     ___| | | |  _ \| |
@@ -24,7 +24,7 @@
 #include "setup.h"
 
 typedef enum {
-  UPTSet=1,
+  UPTSet = 1,
   UPTCharRange,
   UPTNumRange
 } URLPatternType;
@@ -38,12 +38,14 @@ typedef struct {
       short ptr_s;
     } Set;
     struct {
-      char min_c, max_c;
+      char min_c;
+      char max_c;
       char ptr_c;
       int step;
     } CharRange;
     struct {
-      int min_n, max_n;
+      int min_n;
+      int max_n;
       short padlength;
       int ptr_n;
       int step;
@@ -52,7 +54,7 @@ typedef struct {
 } URLPattern;
 
 typedef struct {
-  charliteral[10];
+  char *literal[10];
   URLPattern pattern[9];
   size_t size;
   size_t urllen;
@@ -66,4 +68,5 @@ char* glob_next_url(URLGlob*);
 char* glob_match_url(char*, URLGlob *);
 void glob_cleanup(URLGlob* glob);
 
-#endif /* HEADER_CURL_URLGLOB_H */
+#endif /* HEADER_CURL_TOOL_URLGLOB_H */
+
index f550d64..d2f6a2f 100644 (file)
@@ -283,11 +283,11 @@ SOURCE=.\tool_sleep.c
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\tool_vms.c\r
+SOURCE=.\tool_urlglob.c\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\urlglob.c\r
+SOURCE=.\tool_vms.c\r
 # End Source File\r
 # Begin Source File\r
 \r
@@ -463,11 +463,11 @@ SOURCE=.\tool_sleep.h
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\tool_vms.h\r
+SOURCE=.\tool_urlglob.h\r
 # End Source File\r
 # Begin Source File\r
 \r
-SOURCE=.\urlglob.h\r
+SOURCE=.\tool_vms.h\r
 # End Source File\r
 # Begin Source File\r
 \r