]> git.ipfire.org Git - thirdparty/apache/httpd.git/commitdiff
Ok... allow for getting "words" by also allowing the
authorJim Jagielski <jim@apache.org>
Tue, 29 Dec 2015 22:40:21 +0000 (22:40 +0000)
committerJim Jagielski <jim@apache.org>
Tue, 29 Dec 2015 22:40:21 +0000 (22:40 +0000)
use of curlies... That is:

   "Hello World" Foo Bar

and

   {Hello World} Foo Bar

will both return the same if using ap_getword_conf2()

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1722243 13f79535-47bb-0310-9956-ffa450edef68

include/ap_mmn.h
include/httpd.h
server/util.c

index 7e05d8658297f96568c7e4bfff39f32469e240f6..db83904ba13f752a11239ecb1f8cecf0f6a0eec9 100644 (file)
  *                         conn_rec.
  * 20150222.6 (2.5.0-dev)  Add async_filter to conn_rec.
  * 20150222.7 (2.5.0-dev)  Add ap_casecmpstr[n]();
+ * 20150222.8 (2.5.0-dev)  Add ap_getword_conf2[_nc]();
  */
 
 #define MODULE_MAGIC_COOKIE 0x41503235UL /* "AP25" */
index 1ac9a23f2e927e51628a0f7a26253e71b9c3d5ab..eda314c7cf7dd064378aaa5611dcb08836904678 100644 (file)
@@ -1532,6 +1532,25 @@ AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line);
  */
 AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line);
 
+/**
+ * Get the second word in the string paying attention to quoting.
+ * The format {...} can be used instead of quotes with this implementation
+ * @param p The pool to allocate from
+ * @param line The line to traverse
+ * @return A copy of the string
+ */
+AP_DECLARE(char *) ap_getword_conf2(apr_pool_t *p, const char **line);
+
+/**
+ * Get the second word in the string paying attention to quoting
+ * The format {...} can be used instead of quotes with this implementation
+ * @param p The pool to allocate from
+ * @param line The line to traverse
+ * @return A copy of the string
+ * @note The same as ap_getword_conf2(), except it doesn't use const char **.
+ */
+AP_DECLARE(char *) ap_getword_conf2_nc(apr_pool_t *p, char **line);
+
 /**
  * Check a string for any config define or environment variable construct
  * and replace each of them by the value of that variable, if it exists.
index 62299f7c3039325b5504f4be7c9f0bdbfbab096b..0f709de826ff38ab5c5be2fe9ec9286f3bd48cf2 100644 (file)
@@ -772,16 +772,12 @@ static char *substring_conf(apr_pool_t *p, const char *start, int len,
 #endif
 }
 
-AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line)
-{
-    return ap_getword_conf(p, (const char **) line);
-}
-
-AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
+static char *getword_conf_ex(apr_pool_t *p, const char **line, int curlyok)
 {
     const char *str = *line, *strend;
     char *res;
     char quote;
+    char curly = '{';
 
     while (apr_isspace(*str))
         ++str;
@@ -791,7 +787,11 @@ AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
         return "";
     }
 
-    if ((quote = *str) == '"' || quote == '\'') {
+    if ((quote = *str) == '"' || quote == '\'' || quote == (curlyok ? curly : '\'')) {
+        if (quote == curly) {
+            /* only true if curlyok and we matched */
+            quote = '}';
+        }
         strend = str + 1;
         while (*strend && *strend != quote) {
             if (*strend == '\\' && strend[1] &&
@@ -821,6 +821,26 @@ AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
     return res;
 }
 
+AP_DECLARE(char *) ap_getword_conf_nc(apr_pool_t *p, char **line)
+{
+    return getword_conf_ex(p, (const char **) line, 0);
+}
+
+AP_DECLARE(char *) ap_getword_conf(apr_pool_t *p, const char **line)
+{
+    return getword_conf_ex(p, line, 0);
+}
+
+AP_DECLARE(char *) ap_getword_conf2_nc(apr_pool_t *p, char **line)
+{
+    return getword_conf_ex(p, (const char **) line, 1);
+}
+
+AP_DECLARE(char *) ap_getword_conf2(apr_pool_t *p, const char **line)
+{
+    return getword_conf_ex(p, line, 1);
+}
+
 AP_DECLARE(int) ap_cfg_closefile(ap_configfile_t *cfp)
 {
 #ifdef DEBUG