Jason Edmeades : xcopy: Add support for /H (Hidden/System).

Alexandre Julliard julliard at wine.codeweavers.com
Fri Mar 30 06:20:25 CDT 2007


Module: wine
Branch: master
Commit: 0a3a741a4ab0001f9b56cf8d5fe5c49e8ccfc12b
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=0a3a741a4ab0001f9b56cf8d5fe5c49e8ccfc12b

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Thu Mar 29 22:21:07 2007 +0100

xcopy: Add support for /H (Hidden/System).

---

 programs/xcopy/xcopy.c |   17 +++++++++++++++--
 1 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/programs/xcopy/xcopy.c b/programs/xcopy/xcopy.c
index 8baa92f..df81b8f 100644
--- a/programs/xcopy/xcopy.c
+++ b/programs/xcopy/xcopy.c
@@ -52,6 +52,7 @@
 #define OPT_SHORTNAME    0x00000200
 #define OPT_MUSTEXIST    0x00000400
 #define OPT_REPLACEREAD  0x00000800
+#define OPT_COPYHIDSYS   0x00001000
 
 #define MAXSTRING 8192
 
@@ -157,6 +158,7 @@ int main (int argc, char *argv[])
             case 'N': flags |= OPT_SHORTNAME;     break;
             case 'U': flags |= OPT_MUSTEXIST;     break;
             case 'R': flags |= OPT_REPLACEREAD;   break;
+            case 'H': flags |= OPT_COPYHIDSYS;    break;
             case '-': if (toupper(argvW[0][2])=='Y')
                           flags &= ~OPT_NOPROMPT; break;
             default:
@@ -390,7 +392,7 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
     BOOL            findres = TRUE;
     WCHAR           *inputpath, *outputpath;
     BOOL            copiedFile = FALSE;
-    DWORD           destAttribs;
+    DWORD           destAttribs, srcAttribs;
     BOOL            skipFile;
 
     /* Allocate some working memory on heap to minimize footprint */
@@ -440,9 +442,20 @@ static int XCOPY_DoCopy(WCHAR *srcstem, WCHAR *srcspec,
                                                       wine_dbgstr_w(copyTo));
             if (!copiedFile && !(flags & OPT_SIMULATE)) XCOPY_CreateDirectory(deststem);
 
+            /* See if allowed to copy it */
+            srcAttribs = GetFileAttributesW(copyFrom);
+            if ((srcAttribs & FILE_ATTRIBUTE_HIDDEN) ||
+                (srcAttribs & FILE_ATTRIBUTE_SYSTEM)) {
+
+                if (!(flags & OPT_COPYHIDSYS)) {
+                    skipFile = TRUE;
+                }
+            }
+
             /* See if file exists */
             destAttribs = GetFileAttributesW(copyTo);
-            if (destAttribs != INVALID_FILE_ATTRIBUTES && !(flags & OPT_NOPROMPT)) {
+            if (!skipFile &&
+                destAttribs != INVALID_FILE_ATTRIBUTES && !(flags & OPT_NOPROMPT)) {
                 DWORD count;
                 char  answer[10];
                 BOOL  answered = FALSE;




More information about the wine-cvs mailing list