You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by st...@apache.org on 2012/09/21 21:40:51 UTC

svn commit: r1388644 - in /subversion/branches/10Gb/subversion: include/private/svn_fs_util.h libsvn_fs_util/fs-util.c

Author: stefan2
Date: Fri Sep 21 19:40:51 2012
New Revision: 1388644

URL: http://svn.apache.org/viewvc?rev=1388644&view=rev
Log:
On the 10Gb branch: Introduce a new utility method that determines
whether svn_fs__canonicalize_abspath must be called for a given path.

* subversion/include/private/svn_fs_util.h
  (svn_fs__is_canonical_abspath): declare new API
* subversion/libsvn_fs_util/fs-util.c
  (svn_fs__is_canonical_abspath): implement new API

Modified:
    subversion/branches/10Gb/subversion/include/private/svn_fs_util.h
    subversion/branches/10Gb/subversion/libsvn_fs_util/fs-util.c

Modified: subversion/branches/10Gb/subversion/include/private/svn_fs_util.h
URL: http://svn.apache.org/viewvc/subversion/branches/10Gb/subversion/include/private/svn_fs_util.h?rev=1388644&r1=1388643&r2=1388644&view=diff
==============================================================================
--- subversion/branches/10Gb/subversion/include/private/svn_fs_util.h (original)
+++ subversion/branches/10Gb/subversion/include/private/svn_fs_util.h Fri Sep 21 19:40:51 2012
@@ -52,6 +52,12 @@ extern "C" {
 const char *
 svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool);
 
+/* Return FALSE, if a svn_fs__canonicalize_abspath will return a
+   different value than PATH (despite creating a copy).
+*/
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path);
+
 /* If EXPECT_OPEN, verify that FS refers to an open database;
    otherwise, verify that FS refers to an unopened database.  Return
    an appropriate error if the expectation fails to match the

Modified: subversion/branches/10Gb/subversion/libsvn_fs_util/fs-util.c
URL: http://svn.apache.org/viewvc/subversion/branches/10Gb/subversion/libsvn_fs_util/fs-util.c?rev=1388644&r1=1388643&r2=1388644&view=diff
==============================================================================
--- subversion/branches/10Gb/subversion/libsvn_fs_util/fs-util.c (original)
+++ subversion/branches/10Gb/subversion/libsvn_fs_util/fs-util.c Fri Sep 21 19:40:51 2012
@@ -35,6 +35,40 @@
 #include "private/svn_fspath.h"
 #include "../libsvn_fs/fs-loader.h"
 
+svn_boolean_t
+svn_fs__is_canonical_abspath(const char *path)
+{
+  size_t path_len;
+  const char *end;
+
+  /* No PATH?  No problem. */
+  if (! path)
+    return TRUE;
+
+  /* Empty PATH?  That's just "/". */
+  if (! *path)
+    return FALSE;
+
+  /* No leading slash?  Fix that. */
+  if (*path != '/')
+    return FALSE;
+
+  /* check for trailing '/' */
+  path_len = strlen(path);
+  if (path_len == 1)
+    return TRUE;
+  if (path[path_len - 1] == '/')
+    return FALSE;
+
+  /* check for "//" */
+  end = path + path_len - 1;
+  for (; path != end; ++path)
+    if ((path[0] == '/') && (path[1] == '/'))
+      return FALSE;
+
+  return TRUE;
+}
+
 const char *
 svn_fs__canonicalize_abspath(const char *path, apr_pool_t *pool)
 {