#include "AreaSupport.h"
status_t
UserlandFSUtil::get_area_for_address(void* address, int32 size, area_id* area,
int32* offset, void** areaBaseAddress)
{
if (!area || !offset || size < 0)
return B_BAD_VALUE;
if (!address) {
*area = -1;
*offset = 0;
return B_OK;
}
*area = area_for(address);
if (*area < 0)
return *area;
area_info areaInfo;
status_t error = get_area_info(*area, &areaInfo);
if (error != B_OK)
return error;
*offset = (uint8*)address - (uint8*)areaInfo.address;
if (*offset + size > (int32)areaInfo.size)
return B_BAD_VALUE;
if (areaBaseAddress)
*areaBaseAddress = areaInfo.address;
return B_OK;
}