diff options
Diffstat (limited to 'src/common/connstrings.c')
-rw-r--r-- | src/common/connstrings.c | 53 |
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; +} |