Add a helper filename_part_is_valid() which does half of what
filename_is_valid() does: it checks for valid chars and length, but does
not filter out ".", ".." and "", as these are OK as parts of filenames,
just not alone.
return 0;
}
-bool filename_is_valid(const char *p) {
+bool filename_part_is_valid(const char *p) {
const char *e;
- if (isempty(p))
- return false;
+ /* Checks f the specified string is OK to be *part* of a filename. This is different from
+ * filename_is_valid() as "." and ".." and "" are OK by this call, but not by filename_is_valid(). */
- if (dot_or_dot_dot(p)) /* Yes, in this context we consider "." and ".." invalid */
+ if (!p)
return false;
e = strchrnul(p, '/');
return true;
}
+bool filename_is_valid(const char *p) {
+
+ if (isempty(p))
+ return false;
+
+ if (dot_or_dot_dot(p)) /* Yes, in this context we consider "." and ".." invalid */
+ return false;
+
+ return filename_part_is_valid(p);
+}
+
bool path_is_valid_full(const char *p, bool accept_dot_dot) {
if (isempty(p))
return false;
int path_extract_filename(const char *path, char **ret);
int path_extract_directory(const char *path, char **ret);
+bool filename_part_is_valid(const char *p) _pure_;
bool filename_is_valid(const char *p) _pure_;
bool path_is_valid_full(const char *p, bool accept_dot_dot) _pure_;
static inline bool path_is_valid(const char *p) {