idigi_callback_status_t iDigiFileSystem::app_process_file_lseek(idigi_file_lseek_request_t * const request_data,
                                                      idigi_file_lseek_response_t * const response_data)
{
    idigi_callback_status_t status = idigi_callback_continue;
    SdFile *file = (SdFile *) request_data->handle;

    uint8_t result = 0;

    switch(request_data->origin)
    {
    case IDIGI_SEEK_SET:
        result = file->seekSet(request_data->offset);
        break;
    case IDIGI_SEEK_END:
        if (request_data->offset != 0)
        {
        	// not supported by underlying file-system implementation
        	response_data->error->error_status = idigi_file_invalid_parameter;
        	goto done;
        }
        result = file->seekEnd();
        break;
    case IDIGI_SEEK_CUR:
    default:
        result = file->seekCur(request_data->offset);
        break;
    }

    if (result)	// it's a boolean
    	response_data->offset = request_data->offset;
    else
    	response_data->offset = 0;

    APP_DEBUG("lseek offset %ld, origin %d returned %ld\n", 
                request_data->offset, request_data->origin, response_data->offset);
done:
    return status;
}