From: Gurusamy Sarathy Date: Wed, 12 May 1999 08:23:27 +0000 (+0000) Subject: opendir(D,"x:") on win32 opens cwd() for drive rather than root; X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=23db2e2d7afc6848cb8a7718eb161f0d24b03858;p=p5sagit%2Fp5-mst-13.2.git opendir(D,"x:") on win32 opens cwd() for drive rather than root; stat() behaves similarly p4raw-id: //depot/perl@3396 --- diff --git a/win32/win32.c b/win32/win32.c index 4988e31..ec04823 100644 --- a/win32/win32.c +++ b/win32/win32.c @@ -682,8 +682,15 @@ win32_opendir(char *filename) /* Create the search pattern */ strcpy(scanname, filename); - if (scanname[len-1] != '/' && scanname[len-1] != '\\') + + /* bare drive name means look in cwd for drive */ + if (len == 2 && isALPHA(scanname[0]) && scanname[1] == ':') { + scanname[len++] = '.'; + scanname[len++] = '/'; + } + else if (scanname[len-1] != '/' && scanname[len-1] != '\\') { scanname[len++] = '/'; + } scanname[len++] = '*'; scanname[len] = '\0'; @@ -929,10 +936,10 @@ win32_stat(const char *path, struct stat *buffer) t[l] = '\0'; path = t; break; - /* FindFirstFile() is buggy with "x:", so add a slash :-( */ + /* FindFirstFile() is buggy with "x:", so add a dot :-( */ case ':': if (l == 2 && isALPHA(path[0])) { - t[0] = path[0]; t[1] = ':'; t[2] = '/'; t[3] = '\0'; + t[0] = path[0]; t[1] = ':'; t[2] = '.'; t[3] = '\0'; l = 3; path = t; }