⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 open.c

📁 log4cxx 0.10 unix下编译包
💻 C
📖 第 1 页 / 共 2 页
字号:
     */    if (!(flag & (APR_READ | APR_WRITE))) {        if (flag & APR_OPENINFO) {            if (apr_os_level >= APR_WIN_NT) {                attributes |= FILE_FLAG_BACKUP_SEMANTICS;            }        }        else {            return APR_EACCES;        }        if (flag & APR_READCONTROL)            oflags |= READ_CONTROL;    }    if (flag & APR_XTHREAD) {        /* This win32 specific feature is required          * to allow multiple threads to work with the file.         */        attributes |= FILE_FLAG_OVERLAPPED;    }#if APR_HAS_UNICODE_FS    IF_WIN_OS_IS_UNICODE    {        apr_wchar_t wfname[APR_PATH_MAX];        if (flag & APR_SENDFILE_ENABLED) {                /* This feature is required to enable sendfile operations             * against the file on Win32. Also implies APR_XTHREAD.             */            flag |= APR_XTHREAD;            attributes |= FILE_FLAG_SEQUENTIAL_SCAN | FILE_FLAG_OVERLAPPED;        }        if (rv = utf8_to_unicode_path(wfname, sizeof(wfname)                                                / sizeof(apr_wchar_t), fname))            return rv;        handle = CreateFileW(wfname, oflags, sharemode,                             NULL, createflags, attributes, 0);    }#endif#if APR_HAS_ANSI_FS    ELSE_WIN_OS_IS_ANSI {        handle = CreateFileA(fname, oflags, sharemode,                             NULL, createflags, attributes, 0);        if (flag & APR_SENDFILE_ENABLED) {                /* This feature is not supported on this platform.             */            flag &= ~APR_SENDFILE_ENABLED;        }    }#endif    if (handle == INVALID_HANDLE_VALUE) {        return apr_get_os_error();    }    (*new) = (apr_file_t *)apr_pcalloc(pool, sizeof(apr_file_t));    (*new)->pool = pool;    (*new)->filehand = handle;    (*new)->fname = apr_pstrdup(pool, fname);    (*new)->flags = flag;    (*new)->timeout = -1;    (*new)->ungetchar = -1;    if (flag & APR_APPEND) {        (*new)->append = 1;        SetFilePointer((*new)->filehand, 0, NULL, FILE_END);    }    if (flag & APR_BUFFERED) {        (*new)->buffered = 1;        (*new)->buffer = apr_palloc(pool, APR_FILE_BUFSIZE);    }    /* Need the mutex to handled buffered and O_APPEND style file i/o */    if ((*new)->buffered || (*new)->append) {        rv = apr_thread_mutex_create(&(*new)->mutex,                                      APR_THREAD_MUTEX_DEFAULT, pool);        if (rv) {            if (file_cleanup(*new) == APR_SUCCESS) {                apr_pool_cleanup_kill(pool, *new, file_cleanup);            }            return rv;        }    }    /* Create a pollset with room for one descriptor. */    /* ### check return codes */    (void) apr_pollset_create(&(*new)->pollset, 1, pool, 0);    if (!(flag & APR_FILE_NOCLEANUP)) {        apr_pool_cleanup_register((*new)->pool, (void *)(*new), file_cleanup,                                  apr_pool_cleanup_null);    }    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_file_close(apr_file_t *file){    apr_status_t stat;    if ((stat = file_cleanup(file)) == APR_SUCCESS) {        apr_pool_cleanup_kill(file->pool, file, file_cleanup);        if (file->mutex) {            apr_thread_mutex_destroy(file->mutex);        }        return APR_SUCCESS;    }    return stat;}APR_DECLARE(apr_status_t) apr_file_remove(const char *path, apr_pool_t *pool){#if APR_HAS_UNICODE_FS    IF_WIN_OS_IS_UNICODE    {        apr_wchar_t wpath[APR_PATH_MAX];        apr_status_t rv;        if (rv = utf8_to_unicode_path(wpath, sizeof(wpath)                                               / sizeof(apr_wchar_t), path)) {            return rv;        }        if (DeleteFileW(wpath))            return APR_SUCCESS;    }#endif#if APR_HAS_ANSI_FS    ELSE_WIN_OS_IS_ANSI        if (DeleteFile(path))            return APR_SUCCESS;#endif    return apr_get_os_error();}APR_DECLARE(apr_status_t) apr_file_rename(const char *frompath,                                          const char *topath,                                          apr_pool_t *pool){    IF_WIN_OS_IS_UNICODE    {#if APR_HAS_UNICODE_FS        apr_wchar_t wfrompath[APR_PATH_MAX], wtopath[APR_PATH_MAX];        apr_status_t rv;        if (rv = utf8_to_unicode_path(wfrompath, sizeof(wfrompath)                                            / sizeof(apr_wchar_t), frompath)) {            return rv;        }        if (rv = utf8_to_unicode_path(wtopath, sizeof(wtopath)                                              / sizeof(apr_wchar_t), topath)) {            return rv;        }#ifndef _WIN32_WCE        if (MoveFileExW(wfrompath, wtopath, MOVEFILE_REPLACE_EXISTING |                                            MOVEFILE_COPY_ALLOWED))#else        if (MoveFileW(wfrompath, wtopath))#endif            return APR_SUCCESS;#else        if (MoveFileEx(frompath, topath, MOVEFILE_REPLACE_EXISTING |                                         MOVEFILE_COPY_ALLOWED))            return APR_SUCCESS;#endif    }#if APR_HAS_ANSI_FS    ELSE_WIN_OS_IS_ANSI    {        /* Windows 95 and 98 do not support MoveFileEx, so we'll use         * the old MoveFile function.  However, MoveFile requires that         * the new file not already exist...so we have to delete that         * file if it does.  Perhaps we should back up the to-be-deleted         * file in case something happens?         */        HANDLE handle = INVALID_HANDLE_VALUE;        if ((handle = CreateFile(topath, GENERIC_WRITE, 0, 0,              OPEN_EXISTING, 0, 0 )) != INVALID_HANDLE_VALUE )        {            CloseHandle(handle);            if (!DeleteFile(topath))                return apr_get_os_error();        }        if (MoveFile(frompath, topath))            return APR_SUCCESS;    }        #endif    return apr_get_os_error();}APR_DECLARE(apr_status_t) apr_os_file_get(apr_os_file_t *thefile,                                          apr_file_t *file){    *thefile = file->filehand;    return APR_SUCCESS;}APR_DECLARE(apr_status_t) apr_os_file_put(apr_file_t **file,                                          apr_os_file_t *thefile,                                          apr_int32_t flags,                                          apr_pool_t *pool){    (*file) = apr_pcalloc(pool, sizeof(apr_file_t));    (*file)->pool = pool;    (*file)->filehand = *thefile;    (*file)->ungetchar = -1; /* no char avail */    (*file)->timeout = -1;    (*file)->flags = flags;    if (flags & APR_APPEND) {        (*file)->append = 1;    }    if (flags & APR_BUFFERED) {        (*file)->buffered = 1;        (*file)->buffer = apr_palloc(pool, APR_FILE_BUFSIZE);    }    if ((*file)->append || (*file)->buffered) {        apr_status_t rv;        rv = apr_thread_mutex_create(&(*file)->mutex,                                      APR_THREAD_MUTEX_DEFAULT, pool);        if (rv) {            if (file_cleanup(*file) == APR_SUCCESS) {                apr_pool_cleanup_kill(pool, *file, file_cleanup);            }            return rv;        }    }    /* Create a pollset with room for one descriptor. */    /* ### check return codes */    (void) apr_pollset_create(&(*file)->pollset, 1, pool, 0);    /* XXX... we pcalloc above so all others are zeroed.     * Should we be testing if thefile is a handle to      * a PIPE and set up the mechanics appropriately?     *     *  (*file)->pipe;     */    return APR_SUCCESS;}    APR_DECLARE(apr_status_t) apr_file_eof(apr_file_t *fptr){    if (fptr->eof_hit == 1) {        return APR_EOF;    }    return APR_SUCCESS;}   APR_DECLARE(apr_status_t) apr_file_open_stderr(apr_file_t **thefile, apr_pool_t *pool){#ifdef _WIN32_WCE    return APR_ENOTIMPL;#else    apr_os_file_t file_handle;    apr_set_os_error(APR_SUCCESS);    file_handle = GetStdHandle(STD_ERROR_HANDLE);    if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {        apr_status_t rv = apr_get_os_error();        if (rv == APR_SUCCESS) {            return APR_EINVAL;        }        return rv;    }    return apr_os_file_put(thefile, &file_handle, 0, pool);#endif}APR_DECLARE(apr_status_t) apr_file_open_stdout(apr_file_t **thefile, apr_pool_t *pool){#ifdef _WIN32_WCE    return APR_ENOTIMPL;#else    apr_os_file_t file_handle;    apr_set_os_error(APR_SUCCESS);    file_handle = GetStdHandle(STD_OUTPUT_HANDLE);    if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {        apr_status_t rv = apr_get_os_error();        if (rv == APR_SUCCESS) {            return APR_EINVAL;        }        return rv;    }    return apr_os_file_put(thefile, &file_handle, 0, pool);#endif}APR_DECLARE(apr_status_t) apr_file_open_stdin(apr_file_t **thefile, apr_pool_t *pool){#ifdef _WIN32_WCE    return APR_ENOTIMPL;#else    apr_os_file_t file_handle;    apr_set_os_error(APR_SUCCESS);    file_handle = GetStdHandle(STD_INPUT_HANDLE);    if (!file_handle || (file_handle == INVALID_HANDLE_VALUE)) {        apr_status_t rv = apr_get_os_error();        if (rv == APR_SUCCESS) {            return APR_EINVAL;        }        return rv;    }    return apr_os_file_put(thefile, &file_handle, 0, pool);#endif}APR_POOL_IMPLEMENT_ACCESSOR(file);APR_IMPLEMENT_INHERIT_SET(file, flags, pool, file_cleanup) APR_IMPLEMENT_INHERIT_UNSET(file, flags, pool, file_cleanup)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -