VirtualBox

Ignore:
Timestamp:
Jan 18, 2019 10:15:56 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
128246
Message:

IPRT/dir-poix.cpp,FsPerf.cpp: Darwin adjustments, realizing that the posix mkdir/rmdir code in IPRT does unnecessary work compared to windows wrt return codes in the already-exists-by-is-not-a-directory cases. Better have the functions return same statuses on all platforms where possibble. bugref:9172

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/utils/fs/FsPerf.cpp

    r76873 r76878  
    150150
    151151
     152/** @def FSPERF_VERR_PATH_NOT_FOUND
     153 * Hides the fact that we only get VERR_PATH_NOT_FOUND on non-unix systems.  */
     154#if defined(RT_OS_WINDOWS) //|| defined(RT_OS_OS2) - using posix APIs IIRC, so lost in translation.
     155# define FSPERF_VERR_PATH_NOT_FOUND     VERR_PATH_NOT_FOUND
     156#else
     157# define FSPERF_VERR_PATH_NOT_FOUND     VERR_FILE_NOT_FOUND
     158#endif
     159
     160
    152161/*********************************************************************************************************************************
    153162*   Structures and Typedefs                                                                                                      *
     
    374383DECLINLINE(char *) InDir(const char *pszAppend, size_t cchAppend)
    375384{
     385    Assert(g_szDir[g_cchDir - 1] == RTPATH_SLASH);
    376386    memcpy(&g_szDir[g_cchDir], pszAppend, cchAppend);
    377387    g_szDir[g_cchDir + cchAppend] = '\0';
     
    389399DECLINLINE(char *) InEmptyDir(const char *pszAppend, size_t cchAppend)
    390400{
     401    Assert(g_szEmptyDir[g_cchEmptyDir - 1] == RTPATH_SLASH);
    391402    memcpy(&g_szEmptyDir[g_cchEmptyDir], pszAppend, cchAppend);
    392403    g_szEmptyDir[g_cchEmptyDir + cchAppend] = '\0';
     
    404415DECLINLINE(char *) InDeepDir(const char *pszAppend, size_t cchAppend)
    405416{
     417    Assert(g_szDeepDir[g_cchDeepDir - 1] == RTPATH_SLASH);
    406418    memcpy(&g_szDeepDir[g_cchDeepDir], pszAppend, cchAppend);
    407419    g_szDeepDir[g_cchDeepDir + cchAppend] = '\0';
     
    542554                                RTFILE_O_OPEN | RTFILE_O_DENY_NONE | RTFILE_O_READ), VERR_FILE_NOT_FOUND);
    543555    RTTESTI_CHECK_RC(RTFileOpen(&hFile, InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")),
    544                                 RTFILE_O_OPEN | RTFILE_O_DENY_NONE | RTFILE_O_READ), VERR_PATH_NOT_FOUND);
     556                                RTFILE_O_OPEN | RTFILE_O_DENY_NONE | RTFILE_O_READ), FSPERF_VERR_PATH_NOT_FOUND);
    545557
    546558    /*
     
    647659                                       &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK), VERR_FILE_NOT_FOUND);
    648660    RTTESTI_CHECK_RC(RTPathQueryInfoEx(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")),
    649                                        &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK), VERR_PATH_NOT_FOUND);
     661                                       &ObjInfo, RTFSOBJATTRADD_NOTHING, RTPATH_F_ON_LINK), FSPERF_VERR_PATH_NOT_FOUND);
    650662
    651663    /* Shallow: */
     
    688700                     VERR_FILE_NOT_FOUND);
    689701    RTTESTI_CHECK_RC(RTPathSetMode(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")), 0665),
    690                      VERR_PATH_NOT_FOUND);
     702                     FSPERF_VERR_PATH_NOT_FOUND);
    691703
    692704    /* Shallow: */
     
    733745    RTTESTI_CHECK_RC(RTPathSetTimesEx(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")),
    734746                                      NULL, &Time1, NULL, NULL, RTPATH_F_ON_LINK),
    735                      VERR_PATH_NOT_FOUND);
     747                     FSPERF_VERR_PATH_NOT_FOUND);
    736748
    737749    /* Shallow: */
     
    800812    strcpy(szPath, InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "other-no-such-file")));
    801813    RTTESTI_CHECK_RC(RTPathRename(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")), szPath, 0),
    802                      VERR_PATH_NOT_FOUND);
     814                     FSPERF_VERR_PATH_NOT_FOUND);
    803815
    804816    RTFILE hFile1;
     
    807819    RTTESTI_CHECK_RC(RTFileClose(hFile1), VINF_SUCCESS);
    808820    strcat(strcpy(szPath, g_szDir), "-no-such-dir" RTPATH_SLASH_STR "file16");
    809     RTTESTI_CHECK_RC(RTPathRename(szPath, g_szDir, 0), VERR_PATH_NOT_FOUND);
    810     RTTESTI_CHECK_RC(RTPathRename(g_szDir, szPath, 0), VERR_PATH_NOT_FOUND);
     821    RTTESTI_CHECK_RC(RTPathRename(szPath, g_szDir, 0), FSPERF_VERR_PATH_NOT_FOUND);
     822    RTTESTI_CHECK_RC(RTPathRename(g_szDir, szPath, 0), FSPERF_VERR_PATH_NOT_FOUND);
    811823
    812824    /* Shallow: */
     
    969981    /* Non-existing directories: */
    970982    RTTESTI_CHECK_RC(RTDirRemove(InEmptyDir(RT_STR_TUPLE("no-such-dir"))), VERR_FILE_NOT_FOUND);
    971     RTTESTI_CHECK_RC(RTDirRemove(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file"))), VERR_PATH_NOT_FOUND);
    972     RTTESTI_CHECK_RC(RTDirCreate(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")), 0755, 0), VERR_PATH_NOT_FOUND);
     983    RTTESTI_CHECK_RC(RTDirRemove(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file"))), FSPERF_VERR_PATH_NOT_FOUND);
     984    RTTESTI_CHECK_RC(RTDirCreate(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file")), 0755, 0), FSPERF_VERR_PATH_NOT_FOUND);
     985
     986    /** @todo check what happens if non-final path component isn't a directory. unix
     987     *        should return ENOTDIR and IPRT translates that to VERR_PATH_NOT_FOUND.
     988     *        Curious what happens on windows. */
    973989
    974990    /* Already existing directories and files: */
     
    977993
    978994    /* Remove directory with subdirectories: */
     995#if defined(RT_OS_WINDOWS)
    979996    RTTESTI_CHECK_RC(RTDirRemove(InDir(RT_STR_TUPLE("."))), VERR_DIR_NOT_EMPTY);
     997#else
     998    RTTESTI_CHECK_RC(RTDirRemove(InDir(RT_STR_TUPLE("."))), VERR_INVALID_PARAMETER); /* EINVAL for '.' */
     999#endif
     1000    RTTESTI_CHECK_RC(RTDirRemove(InDir(RT_STR_TUPLE(".."))), VERR_DIR_NOT_EMPTY);
     1001    RTTESTI_CHECK_RC(RTDirRemove(InDir(RT_STR_TUPLE(""))), VERR_DIR_NOT_EMPTY);
    9801002
    9811003    /* Create a directory and remove it: */
     
    9911013    RTTESTI_CHECK_RC(RTDirCreate(g_szDir, 0755, 0), VERR_ALREADY_EXISTS);
    9921014    RTTESTI_CHECK_RC(RTDirCreate(InDir(RT_STR_TUPLE("file18" RTPATH_SLASH_STR "subdir")), 0755, 0), VERR_PATH_NOT_FOUND);
    993 
    9941015
    9951016    /*
     
    10651086    /* Non-existing files. */
    10661087    RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE("no-such-file"))), VERR_FILE_NOT_FOUND);
    1067     RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file"))), VERR_PATH_NOT_FOUND);
     1088    RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE("no-such-dir" RTPATH_SLASH_STR "no-such-file"))), FSPERF_VERR_PATH_NOT_FOUND);
    10681089
    10691090    /* Directories: */
    1070 #ifdef RT_OS_WINDOWS
    10711091    RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE("."))), VERR_ACCESS_DENIED);
    1072 #else
    1073     RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE("."))), VERR_IS_A_DIRECTORY);
    1074 #endif
     1092    RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE(".."))), VERR_ACCESS_DENIED);
     1093    RTTESTI_CHECK_RC(RTFileDelete(InEmptyDir(RT_STR_TUPLE(""))), VERR_ACCESS_DENIED);
    10751094
    10761095    /* Shallow: */
     
    12781297        { VINF_SUCCESS,         RTFILE_SEEK_END,      -(int64_t)cbFile/2,       cbFile / 2 + (cbFile & 1) },
    12791298        { VINF_SUCCESS,         RTFILE_SEEK_CURRENT,  -(int64_t)cbFile/2,       0 },
     1299#if defined(RT_OS_WINDOWS)
    12801300        { VERR_NEGATIVE_SEEK,   RTFILE_SEEK_CURRENT,  -1,                       0 },
     1301#else
     1302        { VERR_INVALID_PARAMETER, RTFILE_SEEK_CURRENT, -1,                      0 },
     1303#endif
    12811304        { VINF_SUCCESS,         RTFILE_SEEK_CURRENT,  0,                        0 },
    12821305    };
     
    17351758            if (RT_SUCCESS(rc))
    17361759            {
     1760                g_szEmptyDir[g_cchEmptyDir++] = RTPATH_SLASH;
     1761                g_szEmptyDir[g_cchEmptyDir]   = '\0';
    17371762                RTTestIPrintf(RTTESTLVL_ALWAYS, "Empty dir: %s\n", g_szEmptyDir);
    17381763
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette