Changeset 2713 for trunk/src/kmk
- Timestamp:
- Nov 21, 2013, 10:11:00 PM (12 years ago)
- Location:
- trunk/src/kmk/kmkbuiltin
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kmk/kmkbuiltin/mscfakes.h
r2702 r2713 40 40 #include <direct.h> 41 41 #include "nt/ntstat.h" 42 #include "nt/ntunlink.h" 42 43 #if defined(MSC_DO_64_BIT_IO) && _MSC_VER >= 1400 /* We want 64-bit file lengths here when possible. */ 43 44 # define off_t __int64 -
trunk/src/kmk/kmkbuiltin/rm.c
r2702 r2713 67 67 # include "haikufakes.h" 68 68 #endif 69 #ifdef _MSC_VER 70 # include "mscfakes.h" 69 #ifdef KBUILD_OS_WINDOWS 70 # ifdef _MSC_VER 71 # include "mscfakes.h" 72 # endif 73 # include "nt/ntunlink.h" 74 /* Use the special unlink implementation to do rmdir too. */ 75 # undef rmdir 76 # define rmdir(a_pszPath) birdUnlinkForced(a_pszPath) 71 77 #endif 72 78 #if defined(__OS2__) || defined(_MSC_VER) … … 77 83 #include "kbuild_protection.h" 78 84 79 #if defined(__EMX__) || defined( _MSC_VER)85 #if defined(__EMX__) || defined(KBUILD_OS_WINDOWS) 80 86 # define IS_SLASH(ch) ( (ch) == '/' || (ch) == '\\' ) 81 87 # define HAVE_DOS_PATHS 1 … … 100 106 101 107 static int dflag, eval, fflag, iflag, Pflag, vflag, Wflag, stdin_ok; 108 #ifdef KBUILD_OS_WINDOWS 109 static int fUseNtDeleteFile; 110 #endif 102 111 static uid_t uid; 103 112 … … 114 123 { "disable-full-protection", no_argument, 0, 266 }, 115 124 { "protection-depth", required_argument, 0, 267 }, 125 #ifdef KBUILD_OS_WINDOWS 126 { "nt-delete-file", no_argument, 0, 268 }, 127 #endif 116 128 { 0, 0, 0, 0 }, 117 129 }; … … 149 161 argv0 = argv[0]; 150 162 dflag = eval = fflag = iflag = Pflag = vflag = Wflag = stdin_ok = 0; 163 #ifdef KBUILD_OS_WINDOWS 164 fUseNtDeleteFile = 0; 165 #endif 151 166 uid = 0; 152 167 kBuildProtectionInit(&g_ProtData); … … 215 230 } 216 231 break; 232 #ifdef KBUILD_OS_WINDOWS 233 case 268: 234 fUseNtDeleteFile = 1; 235 break; 236 #endif 217 237 case '?': 218 238 default: … … 404 424 if (!rm_overwrite(p->fts_accpath, NULL)) 405 425 continue; 426 #ifdef KBUILD_OS_WINDOWS 427 rval = birdUnlinkForcedFast(p->fts_accpath); 428 #else 406 429 rval = unlink(p->fts_accpath); 407 #ifdef _MSC_VER408 if (rval != 0) {409 chmod(p->fts_accpath, 0777);410 rval = unlink(p->fts_accpath);411 }412 430 #endif 413 431 … … 499 517 rval = undelete(f); 500 518 operation = "undelete"; 501 #ifndef _MSC_VER502 519 } else if (S_ISDIR(sb.st_mode)) { 503 #else504 } else if (S_ISDIR(sb.st_mode) || sb.st_dirsymlink) {505 #endif506 520 rval = rmdir(f); 507 521 operation = "rmdir"; … … 510 524 if (!rm_overwrite(f, &sb)) 511 525 continue; 526 #ifndef KBUILD_OS_WINDOWS 512 527 rval = unlink(f); 513 #ifdef _MSC_VER 514 if (rval != 0) { 515 chmod(f, 0777); 516 rval = unlink(f); 528 operation = "unlink"; 529 #else 530 if (fUseNtDeleteFile) { 531 rval = birdUnlinkForcedFast(f); 532 operation = "NtDeleteFile"; 533 } else { 534 rval = birdUnlinkForced(f); 535 operation = "unlink"; 517 536 } 518 537 #endif 519 operation = "unlink";520 538 } 521 539 }
Note:
See TracChangeset
for help on using the changeset viewer.