Changeset 3771 for branches


Ignore:
Timestamp:
Mar 15, 2012, 9:06:45 PM (13 years ago)
Author:
bird
Message:

Backported r3768: realpath and _realrealpath should not fail if the last component does not exist. Extending __lib_Back_fsPathResolve with a flag to this effect.

Location:
branches/libc-0.6/src/emx
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • branches/libc-0.6/src/emx/include/InnoTekLIBC

  • branches/libc-0.6/src/emx/include/InnoTekLIBC/backend.h

    r3695 r3771  
    183183/** Flags for __libc_Back_fsPathResolve().
    184184 * @{ */
    185 #define __LIBC_BACKFS_FLAGS_RESOLVE_FULL    0
     185#define __LIBC_BACKFS_FLAGS_RESOLVE_FULL        0
     186/** Resolves and verfies the entire path, but it's ok if the last component
     187 * does not exist. */
     188#define __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE  0x01
    186189/** Get the native path instead, no unix root translations. */
    187 #define __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE  0x10
     190#define __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE      0x10
    188191/** @} */
    189192
  • branches/libc-0.6/src/emx/src/lib/misc

  • branches/libc-0.6/src/emx/src/lib/misc/_realrealpath.c

    r2254 r3771  
    3939
    4040/**
    41  * Gets the absolute native path. This is used when path and such is passed on to
    42  * non libc processes.
     41 * Gets the absolute native path.
     42 *
     43 * This is used when path and such is passed on to non-kLibC processes.
    4344 *
    4445 * @returns Pointer to the resolved path.
    4546 * @returns NULL and errno on failure.
    4647 * @param   pszPath     The path to resolve
    47  * @param   pszResolved Where to put the resolved path.
    48  *                      If NULL a fitting buffer is malloc'ed.
    49  * @param   cchResolved Size of the passed in buffer. Minimum size of an allocated buffer.
     48 * @param   pszResolved Where to put the resolved path.  If NULL, a fitting
     49 *                      buffer is malloc'ed.
     50 * @param   cbResolved  Size of the passed in buffer. Minimum size of an
     51 *                      allocated buffer.
    5052 */
    51 char    *_realrealpath(const char *pszPath, char *pszResolved, size_t cchResolved)
     53char    *_realrealpath(const char *pszPath, char *pszResolved, size_t cbResolved)
    5254{
    53     LIBCLOG_ENTER("pszPath=%p:{%s} pszResolved=%p cchResolved=%d\n", (void *)pszPath, pszPath, pszResolved, cchResolved);
     55    LIBCLOG_ENTER("pszPath=%p:{%s} pszResolved=%p cbResolved=%d\n", (void *)pszPath, pszPath, pszResolved, cbResolved);
    5456
    5557    if (!pszPath)
     
    6567        if (psz)
    6668        {
    67             rc = __libc_Back_fsPathResolve(pszPath, psz, PATH_MAX, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE);
     69            rc = __libc_Back_fsPathResolve(pszPath, psz, PATH_MAX, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE | __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE);
    6870            if (!rc)
    6971            {
    7072                char *pszOld = psz;
    7173                int cch = strlen(psz) + 1;
    72                 if (cch < cchResolved)
    73                     cch = cchResolved;
     74                if (cch < cbResolved)
     75                    cch = cbResolved;
    7476                psz = realloc(psz, cch);
    7577                if (!psz)
     
    8688
    8789    char *pszRet = pszResolved;
    88     rc = __libc_Back_fsPathResolve(pszPath, pszResolved, cchResolved, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE);
     90    rc = __libc_Back_fsPathResolve(pszPath, pszResolved, cbResolved, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE | __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE);
    8991    if (!rc)
    9092        LIBCLOG_RETURN_MSG(pszRet, "ret %p - pszResolved=%p:{%s}\n", pszRet, pszResolved, pszResolved);
  • branches/libc-0.6/src/emx/src/lib/misc/realpath.c

    r2254 r3771  
    6565        if (psz)
    6666        {
    67             rc = __libc_Back_fsPathResolve(path, psz, PATH_MAX, 0);
     67            rc = __libc_Back_fsPathResolve(path, psz, PATH_MAX, __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE);
    6868            if (!rc)
    6969            {
     
    8484
    8585    char *pszRet = resolved_path;
    86     rc = __libc_Back_fsPathResolve(path, resolved_path, PATH_MAX, 0);
     86    rc = __libc_Back_fsPathResolve(path, resolved_path, PATH_MAX, __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE);
    8787    if (!rc)
    8888        LIBCLOG_RETURN_MSG(pszRet, "ret %p - resolved_path=%p:{%s}\n", pszRet, resolved_path, resolved_path);
  • branches/libc-0.6/src/emx/src/lib/sys

  • branches/libc-0.6/src/emx/src/lib/sys/b_fsPathResolve.c

    r2254 r3771  
    6464     * Resolve to native path.
    6565     */
    66     int     fInUnixTree;
    67     char    szNativePath[PATH_MAX];
    68     szNativePath[0] = '\0';
    69     rc = __libc_back_fsResolve(pszPath, BACKFS_FLAGS_RESOLVE_FULL | BACKFS_FLAGS_RESOLVE_DIR_MAYBE, szNativePath, &fInUnixTree);
     66    int             fInUnixTree = 0;
     67    char            szNativePath[PATH_MAX];
     68    unsigned int    fBackFsFlags = fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE
     69                                 ? BACKFS_FLAGS_RESOLVE_DIR_MAYBE | BACKFS_FLAGS_RESOLVE_FULL_MAYBE
     70                                 : BACKFS_FLAGS_RESOLVE_DIR_MAYBE | BACKFS_FLAGS_RESOLVE_FULL;
     71    szNativePath[0] = szNativePath[1] = szNativePath[2] = szNativePath[3] = '\0';
     72    rc = __libc_back_fsResolve(pszPath, fBackFsFlags, szNativePath, &fInUnixTree);
    7073
    7174    /*
     
    7376     */
    7477    char *pszSrc = &szNativePath[0];
    75     if (!(fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE) && fInUnixTree)
     78    if (   !(fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE)
     79        && fInUnixTree
     80        && *pszSrc)
    7681    {
    7782        pszSrc += __libc_gcchUnixRoot;
Note: See TracChangeset for help on using the changeset viewer.