cmd: Avoid duplicate invocation of strlenW and make code more more resilient in WCMD_copy.

Gerald Pfeifer gerald at pfeifer.com
Sat Sep 7 17:43:45 CDT 2013


GCC warns about destname[strlenW() - 1] since it cannot see that
the string is always non-zero.

In any case, we may want to avoid duplicate invocations of strlenW.

Gerald
---
 programs/cmd/builtins.c | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/programs/cmd/builtins.c b/programs/cmd/builtins.c
index 64e12a0..ed96912 100644
--- a/programs/cmd/builtins.c
+++ b/programs/cmd/builtins.c
@@ -789,6 +789,7 @@ void WCMD_copy(WCHAR * args) {
   } else {
     WCHAR *filenamepart;
     DWORD  attributes;
+    size_t len;
 
     WINE_TRACE("Destination supplied, processing to see if file or directory\n");
 
@@ -798,12 +799,14 @@ void WCMD_copy(WCHAR * args) {
 
     /* If parameter is a directory, ensure it ends in \ */
     attributes = GetFileAttributesW(destname);
-    if ((destname[strlenW(destname) - 1] == '\\') ||
+    len = strlenW(destname);
+    if ((len && destname[len - 1] == '\\') ||
         ((attributes != INVALID_FILE_ATTRIBUTES) &&
          (attributes & FILE_ATTRIBUTE_DIRECTORY))) {
 
       destisdirectory = TRUE;
-      if (!(destname[strlenW(destname) - 1] == '\\')) strcatW(destname, slashW);
+      if (!len || destname[len - 1] != '\\')
+        strcatW(destname, slashW);
       WINE_TRACE("Directory, so full name is now '%s'\n", wine_dbgstr_w(destname));
     }
   }
-- 
1.8.3.4



More information about the wine-patches mailing list