From: Jeffrey Altman Date: Wed, 15 Sep 2010 23:01:06 +0000 (+0200) Subject: Windows: Fix Parent(path) computation to permit mp and symlink creation X-Git-Tag: openafs-devel-1_5_78~92 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=e496c0da54faf610a1b5963887bc679c8c615846;p=packages%2Fo%2Fopenafs.git Windows: Fix Parent(path) computation to permit mp and symlink creation The parent path computation was leaving trailing slashes on the path names which prevented the creation of mount points and symlinks when UNC paths were used that contained mount points. LICENSE MIT Reviewed-on: http://gerrit.openafs.org/2886 Tested-by: Jeffrey Altman Reviewed-by: Rod Widdowson Reviewed-by: Jeffrey Altman (cherry picked from commit 6ad0e5b529dbfd7a2401a0622eb4ea5269124ceb) Change-Id: I55e67817c019dceab045973171bd53db468dfc2c Reviewed-on: http://gerrit.openafs.org/3043 Tested-by: Derrick Brashear Reviewed-by: Derrick Brashear --- diff --git a/src/WINNT/afsd/fs.c b/src/WINNT/afsd/fs.c index c4a7edaac..892d0348d 100644 --- a/src/WINNT/afsd/fs.c +++ b/src/WINNT/afsd/fs.c @@ -293,7 +293,12 @@ Parent(char *apath) } tp = strrchr(tspace, '\\'); if (tp) { - *(tp+1) = 0; /* lv trailing slash so Parent("k:\foo") is "k:\" not "k:" */ + if (tp - tspace > 2 && + tspace[1] == ':' && + &tspace[2] == tp) + *(tp+1) = 0; /* lv trailing slash so Parent("k:\foo") is "k:\" not "k:" */ + else + *tp = 0; } else { fs_ExtractDriveLetter(apath, tspace); diff --git a/src/WINNT/afsd/symlink.c b/src/WINNT/afsd/symlink.c index 43f0bf7ed..50b47e63c 100644 --- a/src/WINNT/afsd/symlink.c +++ b/src/WINNT/afsd/symlink.c @@ -256,13 +256,18 @@ static BOOL IsAdmin (void) } /* return a static pointer to a buffer */ -static char *Parent(apath) -char *apath; { +static char *Parent(char *apath) +{ char *tp; strcpy(tspace, apath); tp = strrchr(tspace, '\\'); if (tp) { - *(tp+1) = 0; /* lv trailing slash so Parent("k:\foo") is "k:\" not "k:" */ + if (tp - tspace > 2 && + tspace[1] == ':' && + &tspace[2] == tp) + *(tp+1) = 0; /* lv trailing slash so Parent("k:\foo") is "k:\" not "k:" */ + else + *tp = 0; } else { fs_ExtractDriveLetter(apath, tspace);