return (NULL);
}
-/*
- * Return a pointer to the portion of str that comes after the last
- * slash (or backslash or colon, if `local' is TRUE).
- *
- * This function has the annoying strstr() property of taking a const
- * char * and returning a char *. You should treat it as if it was a
- * pair of overloaded functions, one mapping mutable->mutable and the
- * other const->const :-(
- */
-static char *stripslashes(const char *str, int local)
-{
- char *p;
-
- if (local) {
- p = strchr(str, ':');
- if (p) str = p+1;
- }
-
- p = strrchr(str, '/');
- if (p) str = p+1;
-
- if (local) {
- p = strrchr(str, '\\');
- if (p) str = p+1;
- }
-
- return (char *)str;
-}
-
/*
* Determine whether a string is entirely composed of dots.
*/
}
}
-/*
- * Return a pointer to the portion of str that comes after the last
- * slash (or backslash or colon, if `local' is TRUE).
- *
- * This function has the annoying strstr() property of taking a const
- * char * and returning a char *. You should treat it as if it was a
- * pair of overloaded functions, one mapping mutable->mutable and the
- * other const->const :-(
- */
-static char *stripslashes(const char *str, int local)
-{
- char *p;
-
- if (local) {
- p = strchr(str, ':');
- if (p) str = p+1;
- }
-
- p = strrchr(str, '/');
- if (p) str = p+1;
-
- if (local) {
- p = strrchr(str, '\\');
- if (p) str = p+1;
- }
-
- return (char *)str;
-}
-
/*
* qsort comparison routine for fxp_name structures. Sorts by real
* file name.
*/
char *dir_file_cat(const char *dir, const char *file);
+/*
+ * Return a pointer to the portion of str that comes after the last
+ * path component separator.
+ *
+ * If 'local' is false, path component separators are taken to just be
+ * '/', on the assumption that we're discussing the path syntax on the
+ * server. But if 'local' is true, the separators are whatever the
+ * local OS will treat that way - so that includes '\' and ':' on
+ * Windows.
+ *
+ * This function has the annoying strstr() property of taking a const
+ * char * and returning a char *. You should treat it as if it was a
+ * pair of overloaded functions, one mapping mutable->mutable and the
+ * other const->const :-(
+ */
+char *stripslashes(const char *str, int local);
+
#endif /* PUTTY_PSFTP_H */
sfree(dir);
}
+char *stripslashes(const char *str, int local)
+{
+ char *p;
+
+ /*
+ * On Unix, we do the same thing regardless of the 'local'
+ * parameter.
+ */
+ p = strrchr(str, '/');
+ if (p) str = p+1;
+
+ return (char *)str;
+}
+
int vet_filename(const char *name)
{
if (strchr(name, '/'))
char *srcpath;
};
-/*
- * Return a pointer to the portion of str that comes after the last
- * slash (or backslash or colon, if `local' is TRUE).
- */
-static char *stripslashes(char *str, int local)
+char *stripslashes(const char *str, int local)
{
char *p;
+ /*
+ * On Windows, \ / : are all path component separators.
+ */
+
if (local) {
p = strchr(str, ':');
if (p) str = p+1;
if (p) str = p+1;
}
- return str;
+ return (char *)str;
}
WildcardMatcher *begin_wildcard_matching(const char *name)