]> granicus.if.org Git - postgresql/commitdiff
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;
        }