Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Minor code beautification in conninfo_uri_parse_params().
authorTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Feb 2015 18:27:12 +0000 (13:27 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Sat, 21 Feb 2015 18:27:12 +0000 (13:27 -0500)
Reading this made me itch, so clean the logic a bit.

src/interfaces/libpq/fe-connect.c

index 17f34cf8b5d4d57e20f3809460535cf9687159a9..e2a06b3d929c947d0322d40aeb09948eef59042f 100644 (file)
@@ -4934,36 +4934,30 @@ conninfo_uri_parse_params(char *params,
                {
                    printfPQExpBuffer(errorMessage,
                                      libpq_gettext("extra key/value separator \"=\" in URI query parameter: \"%s\"\n"),
-                                     params);
+                                     keyword);
                    return false;
                }
                /* Cut off keyword, advance to value */
-               *p = '\0';
-               value = ++p;
+               *p++ = '\0';
+               value = p;
            }
            else if (*p == '&' || *p == '\0')
            {
-               char        prevchar;
-
-               /* Cut off value, remember old value */
-               prevchar = *p;
-               *p = '\0';
-
+               /*
+                * If not at the end, cut off value and advance; leave p
+                * pointing to start of the next parameter, if any.
+                */
+               if (*p != '\0')
+                   *p++ = '\0';
                /* Was there '=' at all? */
                if (value == NULL)
                {
                    printfPQExpBuffer(errorMessage,
                                      libpq_gettext("missing key/value separator \"=\" in URI query parameter: \"%s\"\n"),
-                                     params);
+                                     keyword);
                    return false;
                }
-
-               /*
-                * If not at the end, advance; now pointing to start of the
-                * next parameter, if any.
-                */
-               if (prevchar != '\0')
-                   ++p;
+               /* Got keyword and value, go process them. */
                break;
            }
            else
@@ -5007,24 +5001,12 @@ conninfo_uri_parse_params(char *params,
        if (!conninfo_storeval(connOptions, keyword, value,
                               errorMessage, true, false))
        {
-           /*
-            * Check if there was a hard error when decoding or storing the
-            * option.
-            */
-           if (errorMessage->len != 0)
-           {
-               if (malloced)
-               {
-                   free(keyword);
-                   free(value);
-               }
-               return false;
-           }
-
-           printfPQExpBuffer(errorMessage,
-                             libpq_gettext(
-                                   "invalid URI query parameter: \"%s\"\n"),
-                             keyword);
+           /* Insert generic message if conninfo_storeval didn't give one. */
+           if (errorMessage->len == 0)
+               printfPQExpBuffer(errorMessage,
+                                 libpq_gettext("invalid URI query parameter: \"%s\"\n"),
+                                 keyword);
+           /* And fail. */
            if (malloced)
            {
                free(keyword);
@@ -5032,13 +5014,14 @@ conninfo_uri_parse_params(char *params,
            }
            return false;
        }
+
        if (malloced)
        {
            free(keyword);
            free(value);
        }
 
-       /* Proceed to next key=value pair */
+       /* Proceed to next key=value pair, if any */
        params = p;
    }