apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Doug MacEachern <do...@covalent.net>
Subject Re: apr_buckets_file.c:file_read + XTHREAD
Date Wed, 28 Nov 2001 01:33:46 GMT
ok.  then how about a new apr_file_xread() function and changing
bucket_read to use it?

something like:
apr_status_t apr_file_xread(apr_file_t **f, void *buf,
                            apr_size_t *nbytes, apr_off_t *offset,
                            apr_pool_t *pool)
{
    apr_status_t rv;
#if APR_HAS_THREADS && !APR_HAS_XTHREAD_FILES
    apr_int32_t flags;
#endif

#if APR_HAS_THREADS && !APR_HAS_XTHREAD_FILES
    if ((flags = apr_file_flags_get(f)) & APR_XTHREAD) {
        /* this file descriptor is shared across multiple threads and
         * this OS doesn't support that natively, so as a workaround
         * we must reopen the file into pool */
        const char *fname;
        apr_file_name_get(&fname, *f);

        rv = apr_file_open(*f, fname, (flags & ~APR_XTHREAD), 0, pool);
        if (rv != APR_SUCCESS)
            return rv;
    }
#endif

    /* Handle offset ... */
    rv = apr_file_seek(*f, APR_SET, offset);
    if (rv != APR_SUCCESS) {
        return rv;
    }

    return apr_file_read(*f, buf, nbytes);
}



Mime
View raw message