Changeset 3768
- Timestamp:
- Mar 15, 2012, 8:59:12 PM (13 years ago)
- Location:
- trunk/libc
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libc/include/klibc/backend.h
r3688 r3768 258 258 /** Flags for __libc_Back_fsPathResolve(). 259 259 * @{ */ 260 #define __LIBC_BACKFS_FLAGS_RESOLVE_FULL 0 260 #define __LIBC_BACKFS_FLAGS_RESOLVE_FULL 0 261 /** Resolves and verfies the entire path, but it's ok if the last component 262 * does not exist. */ 263 #define __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE 0x01 261 264 /** Get the native path instead, no unix root translations. */ 262 #define __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE 0x10265 #define __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE 0x10 263 266 /** @} */ 264 267 -
trunk/libc/src/kNIX/b_fsPathResolve.c
r2929 r3768 52 52 * Resolve to native path. 53 53 */ 54 int fInUnixTree; 55 char szNativePath[PATH_MAX]; 56 szNativePath[0] = '\0'; 57 rc = __libc_back_fsResolve(pszPath, BACKFS_FLAGS_RESOLVE_FULL | BACKFS_FLAGS_RESOLVE_DIR_MAYBE, szNativePath, &fInUnixTree); 54 int fInUnixTree = 0; 55 char szNativePath[PATH_MAX]; 56 unsigned int fBackFsFlags = fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE 57 ? BACKFS_FLAGS_RESOLVE_DIR_MAYBE | BACKFS_FLAGS_RESOLVE_FULL_MAYBE 58 : BACKFS_FLAGS_RESOLVE_DIR_MAYBE | BACKFS_FLAGS_RESOLVE_FULL; 59 szNativePath[0] = szNativePath[1] = szNativePath[2] = szNativePath[3] = '\0'; 60 rc = __libc_back_fsResolve(pszPath, fBackFsFlags, szNativePath, &fInUnixTree); 58 61 59 62 /* … … 61 64 */ 62 65 char *pszSrc = &szNativePath[0]; 63 if (!(fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE) && fInUnixTree) 66 if ( !(fFlags & __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE) 67 && fInUnixTree 68 && *pszSrc) 64 69 { 65 70 pszSrc += __libc_gcchUnixRoot; -
trunk/libc/src/libc/misc/_realrealpath.c
r2254 r3768 39 39 40 40 /** 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. 43 44 * 44 45 * @returns Pointer to the resolved path. 45 46 * @returns NULL and errno on failure. 46 47 * @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. 50 52 */ 51 char *_realrealpath(const char *pszPath, char *pszResolved, size_t c chResolved)53 char *_realrealpath(const char *pszPath, char *pszResolved, size_t cbResolved) 52 54 { 53 LIBCLOG_ENTER("pszPath=%p:{%s} pszResolved=%p c chResolved=%d\n", (void *)pszPath, pszPath, pszResolved, cchResolved);55 LIBCLOG_ENTER("pszPath=%p:{%s} pszResolved=%p cbResolved=%d\n", (void *)pszPath, pszPath, pszResolved, cbResolved); 54 56 55 57 if (!pszPath) … … 65 67 if (psz) 66 68 { 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); 68 70 if (!rc) 69 71 { 70 72 char *pszOld = psz; 71 73 int cch = strlen(psz) + 1; 72 if (cch < c chResolved)73 cch = c chResolved;74 if (cch < cbResolved) 75 cch = cbResolved; 74 76 psz = realloc(psz, cch); 75 77 if (!psz) … … 86 88 87 89 char *pszRet = pszResolved; 88 rc = __libc_Back_fsPathResolve(pszPath, pszResolved, c chResolved, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE);90 rc = __libc_Back_fsPathResolve(pszPath, pszResolved, cbResolved, __LIBC_BACKFS_FLAGS_RESOLVE_NATIVE | __LIBC_BACKFS_FLAGS_RESOLVE_FULL_MAYBE); 89 91 if (!rc) 90 92 LIBCLOG_RETURN_MSG(pszRet, "ret %p - pszResolved=%p:{%s}\n", pszRet, pszResolved, pszResolved); -
trunk/libc/src/libc/misc/realpath.c
r2254 r3768 65 65 if (psz) 66 66 { 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); 68 68 if (!rc) 69 69 { … … 84 84 85 85 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); 87 87 if (!rc) 88 88 LIBCLOG_RETURN_MSG(pszRet, "ret %p - resolved_path=%p:{%s}\n", pszRet, resolved_path, resolved_path);
Note:
See TracChangeset
for help on using the changeset viewer.