Module: wine Branch: master Commit: 3d3c5ab4006de7a80af421ddfeb2cad699fb03f0 URL: http://source.winehq.org/git/wine.git/?a=commit;h=3d3c5ab4006de7a80af421ddfe...
Author: Alexandre Julliard julliard@winehq.org Date: Thu Oct 30 13:11:27 2014 +0900
cmd: Add a helper function to check if a path ends with a backslash.
---
programs/cmd/builtins.c | 6 +++--- programs/cmd/directory.c | 9 ++------- programs/cmd/wcmd.h | 5 +++++ 3 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c index f7db4a9..6751d3e 100644 --- a/programs/cmd/builtins.c +++ b/programs/cmd/builtins.c @@ -798,12 +798,12 @@ void WCMD_copy(WCHAR * args) {
/* If parameter is a directory, ensure it ends in \ */ attributes = GetFileAttributesW(destname); - if ((destname[strlenW(destname) - 1] == '\') || + if (ends_with_backslash( destname ) || ((attributes != INVALID_FILE_ATTRIBUTES) && (attributes & FILE_ATTRIBUTE_DIRECTORY))) {
destisdirectory = TRUE; - if (!(destname[strlenW(destname) - 1] == '\')) strcatW(destname, slashW); + if (!ends_with_backslash( destname )) strcatW(destname, slashW); WINE_TRACE("Directory, so full name is now '%s'\n", wine_dbgstr_w(destname)); } } @@ -880,7 +880,7 @@ void WCMD_copy(WCHAR * args) {
/* If parameter is a directory, ensure it ends in * */ attributes = GetFileAttributesW(srcpath); - if (srcpath[strlenW(srcpath) - 1] == '\') { + if (ends_with_backslash( srcpath )) {
/* We need to know where the filename part starts, so append * and recalculate the full resulting path */ diff --git a/programs/cmd/directory.c b/programs/cmd/directory.c index 678e2a1..91142be 100644 --- a/programs/cmd/directory.c +++ b/programs/cmd/directory.c @@ -833,13 +833,8 @@ void WCMD_directory (WCHAR *args) if ((strchrW(path, '*') == NULL) && (strchrW(path, '%') == NULL)) { status = GetFileAttributesW(path); if ((status != INVALID_FILE_ATTRIBUTES) && (status & FILE_ATTRIBUTE_DIRECTORY)) { - if (path[strlenW(path)-1] == '\') { - strcatW (path, starW); - } - else { - static const WCHAR slashStarW[] = {'\','*','\0'}; - strcatW (path, slashStarW); - } + if (!ends_with_backslash( path )) strcatW( path, slashW ); + strcatW (path, starW); } } else { /* Special case wildcard search with no extension (ie parameters ending in '.') as diff --git a/programs/cmd/wcmd.h b/programs/cmd/wcmd.h index e5a0138..c135621 100644 --- a/programs/cmd/wcmd.h +++ b/programs/cmd/wcmd.h @@ -148,6 +148,11 @@ static inline WCHAR *heap_strdupW(const WCHAR *str) return ret; }
+static inline BOOL ends_with_backslash( const WCHAR *path ) +{ + return path[0] && path[strlenW(path) - 1] == '\'; +} + /* Data structure to hold context when executing batch files */
typedef struct _BATCH_CONTEXT {