* dir.cc (mkdir): Check for trailing /. or /.. component.

(rmdir): Ditto.
	* path.cc (has_dot_last_component): New function.
	* path.h (has_dot_last_component): Add declaration.
This commit is contained in:
Corinna Vinschen
2005-09-29 16:23:22 +00:00
parent 9a7b0aad2a
commit f6c9ff6646
3 changed files with 39 additions and 0 deletions

View File

@ -205,6 +205,24 @@ pathmatch (const char *path1, const char *path2)
: strcasematch (path1, path2);
}
/* TODO: This function is used in mkdir and rmdir to generate correct
error messages in case of paths ending in /. or /.. components.
This test should eventually end up in path_conv::check in one way
or another. Right now, normalize_posix_path will just normalize
those components away, which changes the semantics. */
bool
has_dot_last_component (const char *dir)
{
/* SUSv3: . and .. are not allowed as last components in various system
calls. Don't test for backslash path separator since that's a Win32
path following Win32 rules. */
const char *last_comp = strrchr (dir, '/');
return last_comp
&& last_comp[1] == '.'
&& (last_comp[2] == '\0'
|| (last_comp[2] == '.' && last_comp[3] == '\0'));
}
#define isslash(c) ((c) == '/')
/* Normalize a POSIX path.