From: Alin Serdean Date: Tue, 31 Mar 2015 19:16:58 +0000 (+0000) Subject: lockfile: Support \-delimited file names in lockfile_name(). X-Git-Tag: v2.4.0~397 X-Git-Url: http://git.cascardo.eti.br/?p=cascardo%2Fovs.git;a=commitdiff_plain;h=d314fc84e09301f485733fc9fc7c64ce781eb513 lockfile: Support \-delimited file names in lockfile_name(). Currently paths that have only forward slashes like the following "C:/package/binaries/conf.db" work seamlessly. If we try the native windows filepaths i.e. "C:\package\binaries\conf.db" we will hit the following problem: 2015-03-31T15:54:17Z|00001|lockfile|WARN|.c:\package\binaries\conf.db.~lock~: failed to open lock file: Invalid argument 2015-03-31T15:54:17Z|00002|lockfile|WARN|.c:\package\binaries\conf.db.~lock~: failed to lock file: Invalid argument ovsdb-server: I/O error: c:\package\binaries\conf.db: failed to lock lockfile (Invalid argument) In this patch we update the lockfile_name function to also look for backslashes, and also accommodate if we have a mix of backslashes and forward slashes. Signed-off-by: Alin Gabriel Serdean [blp@nicira.com simplified the code] Signed-off-by: Ben Pfaff --- diff --git a/lib/lockfile.c b/lib/lockfile.c index 26aee3324..864d3eff0 100644 --- a/lib/lockfile.c +++ b/lib/lockfile.c @@ -82,6 +82,14 @@ lockfile_name(const char *filename_) * symlink, not one for each. */ filename = follow_symlinks(filename_); slash = strrchr(filename, '/'); + +#ifdef _WIN32 + char *backslash = strrchr(filename, '\\'); + if (backslash && (!slash || backslash > slash)) { + slash = backslash; + } +#endif + lockname = (slash ? xasprintf("%.*s/.%s.~lock~", (int) (slash - filename), filename, slash + 1)