Changeset 2713 for trunk/src/kmk


Ignore:
Timestamp:
Nov 21, 2013, 10:11:00 PM (12 years ago)
Author:
bird
Message:

Some unlink(), rmdir() and kmk_rm optimizations.

Location:
trunk/src/kmk/kmkbuiltin
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kmk/kmkbuiltin/mscfakes.h

    r2702 r2713  
    4040#include <direct.h>
    4141#include "nt/ntstat.h"
     42#include "nt/ntunlink.h"
    4243#if defined(MSC_DO_64_BIT_IO) && _MSC_VER >= 1400 /* We want 64-bit file lengths here when possible. */
    4344# define off_t __int64
  • trunk/src/kmk/kmkbuiltin/rm.c

    r2702 r2713  
    6767# include "haikufakes.h"
    6868#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)
    7177#endif
    7278#if defined(__OS2__) || defined(_MSC_VER)
     
    7783#include "kbuild_protection.h"
    7884
    79 #if defined(__EMX__) || defined(_MSC_VER)
     85#if defined(__EMX__) || defined(KBUILD_OS_WINDOWS)
    8086# define IS_SLASH(ch)   ( (ch) == '/' || (ch) == '\\' )
    8187# define HAVE_DOS_PATHS 1
     
    100106
    101107static int dflag, eval, fflag, iflag, Pflag, vflag, Wflag, stdin_ok;
     108#ifdef KBUILD_OS_WINDOWS
     109static int fUseNtDeleteFile;
     110#endif
    102111static uid_t uid;
    103112
     
    114123    { "disable-full-protection",                        no_argument, 0, 266 },
    115124    { "protection-depth",                               required_argument, 0, 267 },
     125#ifdef KBUILD_OS_WINDOWS
     126    { "nt-delete-file",                                 no_argument, 0, 268 },
     127#endif
    116128    { 0, 0,     0, 0 },
    117129};
     
    149161        argv0 = argv[0];
    150162        dflag = eval = fflag = iflag = Pflag = vflag = Wflag = stdin_ok = 0;
     163#ifdef KBUILD_OS_WINDOWS
     164        fUseNtDeleteFile = 0;
     165#endif
    151166        uid = 0;
    152167        kBuildProtectionInit(&g_ProtData);
     
    215230                        }
    216231                        break;
     232#ifdef KBUILD_OS_WINDOWS
     233                case 268:
     234                        fUseNtDeleteFile = 1;
     235                        break;
     236#endif
    217237                case '?':
    218238                default:
     
    404424                                        if (!rm_overwrite(p->fts_accpath, NULL))
    405425                                                continue;
     426#ifdef KBUILD_OS_WINDOWS
     427                                rval = birdUnlinkForcedFast(p->fts_accpath);
     428#else
    406429                                rval = unlink(p->fts_accpath);
    407 #ifdef _MSC_VER
    408                                 if (rval != 0) {
    409                                         chmod(p->fts_accpath, 0777);
    410                                         rval = unlink(p->fts_accpath);
    411                                 }
    412430#endif
    413431
     
    499517                                rval = undelete(f);
    500518                                operation = "undelete";
    501 #ifndef _MSC_VER
    502519                        } else if (S_ISDIR(sb.st_mode)) {
    503 #else
    504                         } else if (S_ISDIR(sb.st_mode) || sb.st_dirsymlink) {
    505 #endif
    506520                                rval = rmdir(f);
    507521                                operation = "rmdir";
     
    510524                                        if (!rm_overwrite(f, &sb))
    511525                                                continue;
     526#ifndef KBUILD_OS_WINDOWS
    512527                                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";
    517536                                }
    518537#endif
    519                                 operation = "unlink";
    520538                        }
    521539                }
Note: See TracChangeset for help on using the changeset viewer.