Changeset 33337 in vbox
- Timestamp:
- Oct 22, 2010 10:24:50 AM (15 years ago)
- svn:sync-xref-src-repo-rev:
- 66918
- Location:
- trunk
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/path.h
r33245 r33337 642 642 643 643 /** 644 * Returns the destination of a symbolic link. 645 * 646 * @returns IPRT status code. 647 * @param pszPath Path to the file system object. 648 * @param pszDestLink Where to store the destination path. 649 * @param cchDestLink Size of the buffer. 650 */ 651 RTR3DECL(int) RTReadLink(const char *pszPath, char *pszDestLink, size_t cchDestLink); 652 653 /** 644 654 * Changes the mode flags of a file system object. 645 655 * … … 795 805 RTR3DECL(int) RTPathRename(const char *pszSrc, const char *pszDst, unsigned fRename); 796 806 807 /** 808 * Creates a symlink from new path to old path. 809 * 810 * @returns IPRT status code. 811 * @param pszNewPath The path for the new symlink. 812 * @param pszOldPath The destination path for the symlink (i.e. the content of 813 * pszNewPath). 814 */ 815 RTR3DECL(int) RTSymlink(const char *pszNewPath, const char *pszOldPath); 816 797 817 #endif /* IN_RING3 */ 798 818 -
trunk/src/VBox/Runtime/r3/posix/path-posix.cpp
r31406 r33337 479 479 } 480 480 481 RTR3DECL(int) RTReadLink(const char *pszPath, char *pszDestLink, size_t cchDestLink) 482 { 483 char szNativeDest[RTPATH_MAX]; 484 485 /* 486 * Validate input. 487 */ 488 AssertPtrReturn(pszPath, VERR_INVALID_POINTER); 489 AssertReturn(*pszPath, VERR_INVALID_PARAMETER); 490 AssertPtrReturn(pszDestLink, VERR_INVALID_POINTER); 491 492 /* 493 * Convert the filename. 494 */ 495 char const *pszNativePath; 496 int rc = rtPathToNative(&pszNativePath, pszPath, NULL); 497 if (RT_SUCCESS(rc)) 498 { 499 ssize_t cchLink = readlink(pszNativePath, szNativeDest, RTPATH_MAX-1); 500 if (RT_LIKELY(cchLink != -1)) 501 { 502 szNativeDest[RT_MIN(cchLink, (ssize_t)sizeof(RTPATH_MAX-1))] = '\0'; 503 rc = rtPathFromNativeCopy(pszDestLink, cchDestLink, szNativeDest, NULL); 504 } 505 else 506 rc = RTErrConvertFromErrno(errno); 507 508 rtPathFreeNative(pszNativePath, pszPath); 509 } 510 511 LogFlow(("RTReadlink(%p:{%s}, pObjInfo=%p): returns %Rrc\n", 512 pszPath, pszPath, pObjInfo, rc)); 513 return rc; 514 } 481 515 482 516 RTR3DECL(int) RTPathSetTimes(const char *pszPath, PCRTTIMESPEC pAccessTime, PCRTTIMESPEC pModificationTime, … … 868 902 869 903 904 RTR3DECL(int) RTSymlink(const char *pszNewPath, const char *pszOldPath) 905 { 906 /* 907 * Validate input. 908 */ 909 AssertMsgReturn(VALID_PTR(pszNewPath), ("%p\n", pszNewPath), VERR_INVALID_POINTER); 910 AssertMsgReturn(VALID_PTR(pszOldPath), ("%p\n", pszOldPath), VERR_INVALID_POINTER); 911 AssertMsgReturn(*pszNewPath, ("%p\n", pszNewPath), VERR_INVALID_PARAMETER); 912 AssertMsgReturn(*pszOldPath, ("%p\n", pszOldPath), VERR_INVALID_PARAMETER); 913 914 /* 915 * Convert the filenames. 916 */ 917 char const *pszNativeNewPath; 918 char const *pszNativeOldPath; 919 int rc = rtPathToNative(&pszNativeNewPath, pszNewPath, NULL); 920 if (RT_SUCCESS(rc)) 921 { 922 rc = rtPathToNative(&pszNativeOldPath, pszOldPath, NULL); 923 if (RT_SUCCESS(rc)) 924 { 925 if (symlink(pszOldPath, pszNewPath) == -1) 926 rc = RTErrConvertFromErrno(errno); 927 928 rtPathFreeNative(pszNativeOldPath, pszOldPath); 929 } 930 rtPathFreeNative(pszNativeNewPath, pszNewPath); 931 } 932 933 return rc; 934 } 935 936 870 937 RTDECL(bool) RTPathExists(const char *pszPath) 871 938 { -
trunk/src/VBox/Runtime/r3/win/path-win.cpp
r28918 r33337 298 298 299 299 return VINF_SUCCESS; 300 } 301 302 303 RTR3DECL(int) RTReadLink(const char *pszPath, char *pszDestLink, size_t cchDestLink) 304 { 305 return VERR_NOT_IMPLEMENTED; 300 306 } 301 307 … … 499 505 500 506 507 RTR3DECL(int) RTSymlink(const char *pszNewPath, const char *pszOldPath) 508 { 509 return VERR_NOT_IMPLEMENTED; 510 } 511 512 501 513 RTDECL(bool) RTPathExists(const char *pszPath) 502 514 {
Note:
See TracChangeset
for help on using the changeset viewer.