VirtualBox

Ignore:
Timestamp:
Dec 10, 2010 3:17:31 PM (14 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
68779
Message:

Added RTLdrLoadEx for exposing dlerror info.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Runtime/common/ldr/ldrNative.cpp

    r28800 r34959  
    9696RTDECL(int) RTLdrLoad(const char *pszFilename, PRTLDRMOD phLdrMod)
    9797{
    98     LogFlow(("RTLdrLoad: pszFilename=%p:{%s} phLdrMod=%p\n", pszFilename, pszFilename, phLdrMod));
    99 
    100     /*
    101      * validate input.
    102      */
    103     AssertMsgReturn(VALID_PTR(pszFilename), ("pszFilename=%p\n", pszFilename), VERR_INVALID_PARAMETER);
    104     AssertMsgReturn(VALID_PTR(phLdrMod), ("phLdrMod=%p\n", phLdrMod), VERR_INVALID_PARAMETER);
     98    return RTLdrLoadEx(pszFilename, phLdrMod, NULL, 0);
     99}
     100RT_EXPORT_SYMBOL(RTLdrLoad);
     101
     102
     103RTDECL(int) RTLdrLoadEx(const char *pszFilename, PRTLDRMOD phLdrMod, char *pszError, size_t cbError)
     104{
     105    LogFlow(("RTLdrLoadEx: pszFilename=%p:{%s} phLdrMod=%p pszError=%p cbError=%zu\n", pszFilename, pszFilename, phLdrMod, pszError, cbError));
     106
     107    /*
     108     * Validate and massage the input.
     109     */
     110    if (!pszError)
     111        AssertReturn(!cbError, VERR_INVALID_PARAMETER);
     112    else
     113    {
     114        AssertPtrReturn(pszError, VERR_INVALID_POINTER);
     115        if (cbError)
     116            *pszError = '\0';
     117        else
     118            pszError = NULL;
     119    }
     120    AssertPtrReturn(pszFilename, VERR_INVALID_POINTER);
     121    AssertPtrReturn(phLdrMod, VERR_INVALID_POINTER);
    105122
    106123    /*
     
    119136         * Attempt to open the module.
    120137         */
    121         rc = rtldrNativeLoad(pszFilename, &pMod->hNative);
     138        rc = rtldrNativeLoad(pszFilename, &pMod->hNative, pszError, cbError);
    122139        if (RT_SUCCESS(rc))
    123140        {
     
    126143            return rc;
    127144        }
     145
    128146        RTMemFree(pMod);
    129147    }
     148    else if (cbError)
     149        RTStrPrintf(pszError, cbError, "Failed to allocate %zu bytes for the module handle", sizeof(*pMod));
    130150    *phLdrMod = NIL_RTLDRMOD;
    131151    LogFlow(("RTLdrLoad: returns %Rrc\n", rc));
    132152    return rc;
    133153}
    134 RT_EXPORT_SYMBOL(RTLdrLoad);
     154RT_EXPORT_SYMBOL(RTLdrLoadEx);
    135155
    136156
Note: See TracChangeset for help on using the changeset viewer.

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