Author: cmpilato
Date: Wed Aug  7 19:51:18 2013
New Revision: 1511457

URL: http://svn.apache.org/r1511457
Log:
On the 'SVNParentPathTemplate' branch: Avoid using %s and
apr_psprintf().  Rather, do proper substitution of "%{SERVER_NAME}".

* subversion/mod_dav_svn/mod_dav_svn.c
  (dir_conf_t): Comment tweak for line length.
  (merge_dir_config): Wrap long line.
  (dav_svn__get_fs_parent_path): Rewrite substitution mechanism around
    svn_stringbuf_replace().

Modified:
    
subversion/branches/SVNParentPathTemplate/subversion/mod_dav_svn/mod_dav_svn.c

Modified: 
subversion/branches/SVNParentPathTemplate/subversion/mod_dav_svn/mod_dav_svn.c
URL: 
http://svn.apache.org/viewvc/subversion/branches/SVNParentPathTemplate/subversion/mod_dav_svn/mod_dav_svn.c?rev=1511457&r1=1511456&r2=1511457&view=diff
==============================================================================
--- 
subversion/branches/SVNParentPathTemplate/subversion/mod_dav_svn/mod_dav_svn.c 
(original)
+++ 
subversion/branches/SVNParentPathTemplate/subversion/mod_dav_svn/mod_dav_svn.c 
Wed Aug  7 19:51:18 2013
@@ -95,7 +95,7 @@ typedef struct dir_conf_t {
   const char *repo_name;             /* repository name */
   const char *xslt_uri;              /* XSL transform URI */
   const char *fs_parent_path;        /* path to parent of SVN FS'es  */
-  const char *fs_parent_path_template; /* template for path to parent of SVN 
FS'es  */
+  const char *fs_parent_path_template; /* fs_parent_path-like template  */
   enum conf_flag autoversioning;     /* whether autoversioning is active */
   dav_svn__bulk_upd_conf bulk_updates; /* whether bulk updates are allowed */
   enum conf_flag v2_protocol;        /* whether HTTP v2 is advertised */
@@ -242,7 +242,8 @@ merge_dir_config(apr_pool_t *p, void *ba
   newconf->repo_name = INHERIT_VALUE(parent, child, repo_name);
   newconf->xslt_uri = INHERIT_VALUE(parent, child, xslt_uri);
   newconf->fs_parent_path = INHERIT_VALUE(parent, child, fs_parent_path);
-  newconf->fs_parent_path_template = INHERIT_VALUE(parent, child, 
fs_parent_path_template);
+  newconf->fs_parent_path_template = INHERIT_VALUE(parent, child,
+                                                   fs_parent_path_template);
   newconf->autoversioning = INHERIT_VALUE(parent, child, autoversioning);
   newconf->bulk_updates = INHERIT_VALUE(parent, child, bulk_updates);
   newconf->v2_protocol = INHERIT_VALUE(parent, child, v2_protocol);
@@ -659,9 +660,23 @@ dav_svn__get_fs_parent_path(request_rec 
   conf = ap_get_module_config(r->per_dir_config, &dav_svn_module);
   if (conf->fs_parent_path_template)
     {
-      return apr_psprintf(r->pool,
-                          conf->fs_parent_path_template,
-                          ap_get_server_name(r));
+      svn_stringbuf_t *pp =
+        svn_stringbuf_create(conf->fs_parent_path_template, r->pool);
+
+      while (1)
+        {
+          const char *server_name;
+          const char *sub = strstr(pp->data, "%{SERVER_NAME}");
+
+          if (! sub)
+            break;
+
+          server_name = ap_get_server_name(r);
+          svn_stringbuf_replace(pp, sub - pp->data, 14,
+                                server_name, strlen(server_name));
+        }
+
+      return pp->data;
     }
   return conf->fs_parent_path;
 }


Reply via email to