std::streambuf::int_type File_buffer::underflow()
{
    try {
        if (gptr() < egptr()) { //buffer not exhausted
            return traits_type::to_int_type(*gptr());
        }

        char *base = &buffer_.front();
        char *start = base;

        if (eback() == base) { // true when this isn't the first fill
            // Make arrangements for putback characters
            std::memmove(base, egptr() - put_back_, put_back_);
            start += put_back_;
        }

        // start is now the start of the buffer, proper.
        // Read from fptr_ in to the provided buffer
        CF::OctetSequence_var data;
        if (!CORBA::is_nil(fptr_) && (!fptr_->_non_existent())) {
            fptr_->read(data, buffer_.size() - (start - base));
        } else {
            return traits_type::eof();
        }

        if (data->length() == 0) {
            return traits_type::eof();
        }

        memcpy(start, (const char*)data->get_buffer(), data->length());

        // Set buffer pointers
        setg(base, start, start + data->length());

        return traits_type::to_int_type(*gptr());
    } catch (...) {
        return traits_type::eof();
    }
}
static std::string getLogConfig(std::string uri)
{
    std::string localPath;

    std::string::size_type fsPos = uri.find("?fs=");
    if (std::string::npos == fsPos) {
        return localPath;
    }

    std::string IOR = uri.substr(fsPos + 4);
    CORBA::Object_var obj = ossie::corba::stringToObject(IOR);
    if (CORBA::is_nil(obj)) {
        return localPath;
    }

    CF::FileSystem_var fileSystem = CF::FileSystem::_narrow(obj);
    if (CORBA::is_nil(fileSystem)) {
        return localPath;
    }

    std::string remotePath = uri.substr(0, fsPos);
    CF::OctetSequence_var data;
    try {
        CF::File_var remoteFile = fileSystem->open(remotePath.c_str(), true);
        CORBA::ULong size = remoteFile->sizeOf();
        remoteFile->read(data, size);
    } catch (...) {
        return localPath;
    }

    std::string tempPath = remotePath;
    std::string::size_type slashPos = remotePath.find_last_of('/');
    if (std::string::npos != slashPos) {
        tempPath.erase(0, slashPos + 1);
    }
    std::fstream localFile(tempPath.c_str(), std::ios::out|std::ios::trunc);
    if (!localFile) {
        return localPath;
    }

    if (localFile.write((const char*)data->get_buffer(), data->length())) {
        localPath = tempPath;
    }
    localFile.close();

    return localPath;
}