[ovs-dev] [PATCH] lib/lockfile.c: Fix the name of the lockfile on Windows
Ben Pfaff
blp at nicira.com
Sat Jul 26 20:51:00 UTC 2014
On Fri, Jul 25, 2014 at 07:27:58PM -0700, Nithin Raju wrote:
> On Windows, backslash('\') is a valid directory separator. In
> lockfile_name(), we treat only forward-slash ('/') as a directory
> separator. This results in a lockfile name such as
> ...\conf.db.~lock~ for a input file such as ..\conf.db.
>
> We fix the issue in this patch. This was per Ben's suggestion.
> This fix is specific to Windows, since '/' is a valid character
> in a file or directory name in Linux.
>
> Signed-off-by: Nithin Raju <nithin at vmware.com>
> ---
> lib/lockfile.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/lib/lockfile.c b/lib/lockfile.c
> index 1ef6251..15a7e4d 100644
> --- a/lib/lockfile.c
> +++ b/lib/lockfile.c
> @@ -82,6 +82,12 @@ lockfile_name(const char *filename_)
> * symlink, not one for each. */
> filename = follow_symlinks(filename_);
> slash = strrchr(filename, '/');
> +#ifdef _WIN32
> + if (!slash) {
> + /* On Windows, '\' is a valid directory separator. */
> + slash = strrchr(filename, '\\');
> + }
> +#endif
I think that this can get the wrong result if a filename has a mix of
directory separators. In /a/b\c, for example, it will skip over the \
to the /. Probably we want a helper function here to return the last /
or \.
More information about the dev
mailing list