aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc2.c67
-rw-r--r--src/misc2.h1
-rw-r--r--src/path.c67
-rw-r--r--src/path.h1
4 files changed, 68 insertions, 68 deletions
diff --git a/src/misc2.c b/src/misc2.c
index 1a3d315899..c4d93ca1f0 100644
--- a/src/misc2.c
+++ b/src/misc2.c
@@ -1685,73 +1685,6 @@ void sort_strings(char_u **files, int count)
qsort((void *)files, (size_t)count, sizeof(char_u *), sort_compare);
}
-#if !defined(NO_EXPANDPATH) || defined(PROTO)
-/*
- * Compare path "p[]" to "q[]".
- * If "maxlen" >= 0 compare "p[maxlen]" to "q[maxlen]"
- * Return value like strcmp(p, q), but consider path separators.
- */
-int pathcmp(const char *p, const char *q, int maxlen)
-{
- int i;
- int c1, c2;
- const char *s = NULL;
-
- for (i = 0; maxlen < 0 || i < maxlen; i += MB_PTR2LEN((char_u *)p + i)) {
- c1 = PTR2CHAR((char_u *)p + i);
- c2 = PTR2CHAR((char_u *)q + i);
-
- /* End of "p": check if "q" also ends or just has a slash. */
- if (c1 == NUL) {
- if (c2 == NUL) /* full match */
- return 0;
- s = q;
- break;
- }
-
- /* End of "q": check if "p" just has a slash. */
- if (c2 == NUL) {
- s = p;
- break;
- }
-
- if ((p_fic ? MB_TOUPPER(c1) != MB_TOUPPER(c2) : c1 != c2)
-#ifdef BACKSLASH_IN_FILENAME
- /* consider '/' and '\\' to be equal */
- && !((c1 == '/' && c2 == '\\')
- || (c1 == '\\' && c2 == '/'))
-#endif
- ) {
- if (vim_ispathsep(c1))
- return -1;
- if (vim_ispathsep(c2))
- return 1;
- return p_fic ? MB_TOUPPER(c1) - MB_TOUPPER(c2)
- : c1 - c2; /* no match */
- }
- }
- if (s == NULL) /* "i" ran into "maxlen" */
- return 0;
-
- c1 = PTR2CHAR((char_u *)s + i);
- c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i));
- /* ignore a trailing slash, but not "//" or ":/" */
- if (c2 == NUL
- && i > 0
- && !after_pathsep((char_u *)s, (char_u *)s + i)
-#ifdef BACKSLASH_IN_FILENAME
- && (c1 == '/' || c1 == '\\')
-#else
- && c1 == '/'
-#endif
- )
- return 0; /* match with trailing slash */
- if (s == q)
- return -1; /* no match */
- return 1;
-}
-#endif
-
/*
* Return 0 for not writable, 1 for writable file, 2 for a dir which we have
* rights to write into.
diff --git a/src/misc2.h b/src/misc2.h
index 44c0a8be0f..66971c4d4f 100644
--- a/src/misc2.h
+++ b/src/misc2.h
@@ -72,7 +72,6 @@ int vim_chdirfile(char_u *fname);
int illegal_slash(char *name);
int vim_chdir(char_u *new_dir);
void sort_strings(char_u **files, int count);
-int pathcmp(const char *p, const char *q, int maxlen);
int filewritable(char_u *fname);
int emsg3(char_u *s, char_u *a1, char_u *a2);
int emsgn(char_u *s, long n);
diff --git a/src/path.c b/src/path.c
index bfd21b426c..eaa4b87a02 100644
--- a/src/path.c
+++ b/src/path.c
@@ -1694,3 +1694,70 @@ int same_directory(char_u *f1, char_u *f2)
&& pathcmp((char *)ffname, (char *)f2, (int)(t1 - ffname)) == 0;
}
+#if !defined(NO_EXPANDPATH) || defined(PROTO)
+/*
+ * Compare path "p[]" to "q[]".
+ * If "maxlen" >= 0 compare "p[maxlen]" to "q[maxlen]"
+ * Return value like strcmp(p, q), but consider path separators.
+ */
+int pathcmp(const char *p, const char *q, int maxlen)
+{
+ int i;
+ int c1, c2;
+ const char *s = NULL;
+
+ for (i = 0; maxlen < 0 || i < maxlen; i += MB_PTR2LEN((char_u *)p + i)) {
+ c1 = PTR2CHAR((char_u *)p + i);
+ c2 = PTR2CHAR((char_u *)q + i);
+
+ /* End of "p": check if "q" also ends or just has a slash. */
+ if (c1 == NUL) {
+ if (c2 == NUL) /* full match */
+ return 0;
+ s = q;
+ break;
+ }
+
+ /* End of "q": check if "p" just has a slash. */
+ if (c2 == NUL) {
+ s = p;
+ break;
+ }
+
+ if ((p_fic ? MB_TOUPPER(c1) != MB_TOUPPER(c2) : c1 != c2)
+#ifdef BACKSLASH_IN_FILENAME
+ /* consider '/' and '\\' to be equal */
+ && !((c1 == '/' && c2 == '\\')
+ || (c1 == '\\' && c2 == '/'))
+#endif
+ ) {
+ if (vim_ispathsep(c1))
+ return -1;
+ if (vim_ispathsep(c2))
+ return 1;
+ return p_fic ? MB_TOUPPER(c1) - MB_TOUPPER(c2)
+ : c1 - c2; /* no match */
+ }
+ }
+ if (s == NULL) /* "i" ran into "maxlen" */
+ return 0;
+
+ c1 = PTR2CHAR((char_u *)s + i);
+ c2 = PTR2CHAR((char_u *)s + i + MB_PTR2LEN((char_u *)s + i));
+ /* ignore a trailing slash, but not "//" or ":/" */
+ if (c2 == NUL
+ && i > 0
+ && !after_pathsep((char_u *)s, (char_u *)s + i)
+#ifdef BACKSLASH_IN_FILENAME
+ && (c1 == '/' || c1 == '\\')
+#else
+ && c1 == '/'
+#endif
+ )
+ return 0; /* match with trailing slash */
+ if (s == q)
+ return -1; /* no match */
+ return 1;
+}
+#endif
+
diff --git a/src/path.h b/src/path.h
index 6ccbab9c40..07bd4d5588 100644
--- a/src/path.h
+++ b/src/path.h
@@ -33,4 +33,5 @@ int vim_FullName(char_u *fname, char_u *buf, int len, int force);
char_u *fix_fname(char_u *fname);
int after_pathsep(char_u *b, char_u *p);
int same_directory(char_u *f1, char_u *f2);
+int pathcmp(const char *p, const char *q, int maxlen);
#endif