summaryrefslogtreecommitdiff
path: root/src/common/connstrings.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/connstrings.c')
-rw-r--r--src/common/connstrings.c53
1 files changed, 53 insertions, 0 deletions
diff --git a/src/common/connstrings.c b/src/common/connstrings.c
new file mode 100644
index 00000000000..91170a18847
--- /dev/null
+++ b/src/common/connstrings.c
@@ -0,0 +1,53 @@
+/*
+ * connstrings.c
+ * connecting string processing functions
+ *
+ * Copyright (c) 2012-2015, PostgreSQL Global Development Group
+ *
+ * src/include/common/connstrings.c
+ */
+#include "postgres_fe.h"
+
+#include <string.h>
+
+#include "common/connstrings.h"
+
+
+/* The connection URI must start with either of the following designators: */
+static const char uri_designator[] = "postgresql://";
+static const char short_uri_designator[] = "postgres://";
+
+
+/*
+ * Checks if connection string starts with either of the valid URI prefix
+ * designators.
+ *
+ * Returns the URI prefix length, 0 if the string doesn't contain a URI prefix.
+ */
+int
+libpq_connstring_uri_prefix_length(const char *connstr)
+{
+ if (strncmp(connstr, uri_designator,
+ sizeof(uri_designator) - 1) == 0)
+ return sizeof(uri_designator) - 1;
+
+ if (strncmp(connstr, short_uri_designator,
+ sizeof(short_uri_designator) - 1) == 0)
+ return sizeof(short_uri_designator) - 1;
+
+ return 0;
+}
+
+/*
+ * Recognized connection string either starts with a valid URI prefix or
+ * contains a "=" in it.
+ *
+ * Must be consistent with parse_connection_string: anything for which this
+ * returns true should at least look like it's parseable by that routine.
+ */
+bool
+libpq_connstring_is_recognized(const char *connstr)
+{
+ return libpq_connstring_uri_prefix_length(connstr) != 0 ||
+ strchr(connstr, '=') != NULL;
+}