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

📄 apr_file_info.h

📁 Apache V2.0.15 Alpha For Linuxhttpd-2_0_15-alpha.tar.Z
💻 H
字号:
/* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2000-2001 The Apache Software Foundation.  All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. The end-user documentation included with the redistribution, *    if any, must include the following acknowledgment: *       "This product includes software developed by the *        Apache Software Foundation (http://www.apache.org/)." *    Alternately, this acknowledgment may appear in the software itself, *    if and wherever such third-party acknowledgments normally appear. * * 4. The names "Apache" and "Apache Software Foundation" must *    not be used to endorse or promote products derived from this *    software without prior written permission. For written *    permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache", *    nor may "Apache" appear in their name, without prior written *    permission of the Apache Software Foundation. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation.  For more * information on the Apache Software Foundation, please see * <http://www.apache.org/>. */#ifndef APR_FILE_INFO_H#define APR_FILE_INFO_H#include "apr.h"#include "apr_user.h"#include "apr_pools.h"#include "apr_time.h"#include "apr_errno.h"#if APR_HAVE_SYS_UIO_H#include <sys/uio.h>#endif#ifdef __cplusplusextern "C" {#endif /* __cplusplus *//** * @package APR File handling */typedef enum {    APR_NOFILE = 0,     /* the file exists, but APR doesn't know its type */    APR_REG,            /* a regular file */    APR_DIR,            /* a directory */    APR_CHR,            /* a character device */    APR_BLK,            /* a block device */    APR_PIPE,           /* a FIFO / pipe */    APR_LNK,            /* a symbolic link */    APR_SOCK            /* a [unix domain] socket */} apr_filetype_e; /* Permissions flags */#define APR_UREAD     0x400 #define APR_UWRITE    0x200#define APR_UEXECUTE  0x100#define APR_GREAD     0x040#define APR_GWRITE    0x020#define APR_GEXECUTE  0x010#define APR_WREAD     0x004#define APR_WWRITE    0x002#define APR_WEXECUTE  0x001#define APR_OS_DEFAULT 0xFFF/** * Structure for referencing directories. * @defvar apr_dir_t */typedef struct apr_dir_t          apr_dir_t;/** * Structure for determining file permissions. * @defvar apr_fileperms_t */typedef apr_int32_t               apr_fileperms_t;#ifdef WIN32/** * Structure for determining the inode of the file. * @defvar apr_ino_t */typedef apr_uint64_t              apr_ino_t;/** * Structure for determining the device the file is on. * @defvar apr_dev_t */typedef apr_uint32_t              apr_dev_t;#elsetypedef ino_t                     apr_ino_t;typedef dev_t                     apr_dev_t;#endiftypedef struct apr_finfo_t        apr_finfo_t;#define APR_FINFO_LINK   0x00000001#define APR_FINFO_MTIME  0x00000010#define APR_FINFO_CTIME  0x00000020#define APR_FINFO_ATIME  0x00000040#define APR_FINFO_SIZE   0x00000100#define APR_FINFO_CSIZE  0x00000200#define APR_FINFO_DEV    0x00001000#define APR_FINFO_INODE  0x00002000#define APR_FINFO_NLINK  0x00004000#define APR_FINFO_TYPE   0x00008000#define APR_FINFO_USER   0x00010000 #define APR_FINFO_GROUP  0x00020000 #define APR_FINFO_UPROT  0x00100000 #define APR_FINFO_GPROT  0x00200000#define APR_FINFO_WPROT  0x00400000#define APR_FINFO_ICASE  0x01000000  /*  if dev is case insensitive */#define APR_FINFO_NAME   0x02000000  /*  ->name in proper case */#define APR_FINFO_MIN    0x00008170  /*  type, mtime, ctime, atime, size */#define APR_FINFO_IDENT  0x00003000  /*  dev and inode */#define APR_FINFO_OWNER  0x00030000  /*  user and group */#define APR_FINFO_PROT   0x00700000  /*  all protections */#define APR_FINFO_NORM   0x0073b170  /*  an atomic unix apr_stat() */#define APR_FINFO_DIRENT 0x02000000  /*  an atomic unix apr_dir_read() *//** * The file information structure.  This is analogous to the POSIX * stat structure. */struct apr_finfo_t {    /** Allocates memory and closes lingering handles in the specified pool */    apr_pool_t *cntxt;    /** The bitmask describing valid fields of this apr_finfo_t structure      *  including all available 'wanted' fields and potentially more */    apr_int32_t valid;    /** The access permissions of the file.  Mimics Unix access rights. */    apr_fileperms_t protection;    /** The type of file.  One of APR_NOFILE, APR_REG, APR_DIR, APR_CHR,      *  APR_BLK, APR_PIPE, APR_LNK, APR_SOCK      */    apr_filetype_e filetype;    /** The user id that owns the file */    apr_uid_t user;    /** The group id that owns the file */    apr_gid_t group;    /** The inode of the file. */    apr_ino_t inode;    /** The id of the device the file is on. */    apr_dev_t device;    /** The number of hard links to the file. */    apr_int32_t nlink;    /** The size of the file */    apr_off_t size;    /** The storage size consumed by the file */    apr_off_t csize;    /** The time the file was last accessed */    apr_time_t atime;    /** The time the file was last modified */    apr_time_t mtime;    /** The time the file was last changed */    apr_time_t ctime;    /** The full pathname of the file */    const char *fname;    /** The file's name (no path) in filesystem case */    const char *name;    /** The file's handle, if accessed (can be submitted to apr_duphandle) */    struct apr_file_t *filehand;};/** * get the specified file's stats.  The file is specified by filename,  * instead of using a pre-opened file. * @param finfo Where to store the information about the file, which is * never touched if the call fails. * @param fname The name of the file to stat. * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values  * @param cont the pool to use to allocate the new file.  * @deffunc apr_status_t apr_stat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont) */ APR_DECLARE(apr_status_t) apr_stat(apr_finfo_t *finfo, const char *fname,                                   apr_int32_t wanted, apr_pool_t *cont);/** * get the specified file's stats.  The file is specified by filename,  * instead of using a pre-opened file.  If the file is a symlink, this function * will get the stats for the symlink not the file the symlink refers to. * @param finfo Where to store the information about the file, which is * never touched if the call fails. * @param fname The name of the file to stat. * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values  * @param cont the pool to use to allocate the new file.  * @deffunc apr_status_t apr_lstat(apr_finfo_t *finfo, const char *fname, apr_int32_t wanted, apr_pool_t *cont) * @tip This function is depreciated, it's equivilant to calling apr_stat with  * the wanted flag value APR_FINFO_LINK */ APR_DECLARE(apr_status_t) apr_lstat(apr_finfo_t *finfo, const char *fname,                                    apr_int32_t wanted, apr_pool_t *cont);/** * Open the specified directory. * @param new_dir The opened directory descriptor. * @param dirname The full path to the directory (use / on all systems) * @param cont The pool to use. * @deffunc apr_status_t apr_dir_open(apr_dir_t **new_dir, const char *dirname, apr_pool_t *cont) */                        APR_DECLARE(apr_status_t) apr_dir_open(apr_dir_t **new_dir,                                        const char *dirname,                                        apr_pool_t *cont);/** * close the specified directory.  * @param thedir the directory descriptor to close. * @deffunc apr_status_t apr_dir_close(apr_dir_t *thedir) */                        APR_DECLARE(apr_status_t) apr_dir_close(apr_dir_t *thedir);/** * Read the next entry from the specified directory.  * @param finfo the file info structure and filled in by apr_dir_read * @param wanted The desired apr_finfo_t fields, as a bit flag of APR_FINFO_ values  * @param thedir the directory descriptor returned from apr_dir_open * @tip All systems return . and .. as the first two files. * @deffunc apr_status_t apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted, apr_dir_t *thedir) */                        APR_DECLARE(apr_status_t) apr_dir_read(apr_finfo_t *finfo, apr_int32_t wanted,                                       apr_dir_t *thedir);/** * Rewind the directory to the first entry. * @param thedir the directory descriptor to rewind. * @deffunc apr_status_t apr_dir_rewind(apr_dir_t *thedir) */                        APR_DECLARE(apr_status_t) apr_dir_rewind(apr_dir_t *thedir);/* apr_filepath flags *//* Cause apr_filepath_merge to fail if addpath is above rootpath */#define APR_FILEPATH_NOTABOVEROOT   0x01/* internal: Only meaningful with APR_FILEPATH_NOTABOVEROOT */#define APR_FILEPATH_SECUREROOTTEST 0x02/* Cause apr_filepath_merge to fail if addpath is above rootpath, * even given a rootpath /foo/bar and an addpath ../bar/bash */#define APR_FILEPATH_SECUREROOT     0x03/* Fail apr_filepath_merge if the merged path is relative */#define APR_FILEPATH_NOTRELATIVE    0x04/* Fail apr_filepath_merge if the merged path is absolute */#define APR_FILEPATH_NOTABSOLUTE    0x08/* Cleans all ambigious /./  or // segments  * if the target is a directory */#define APR_FILEPATH_CANONICAL      0x10/* Resolve the true case of existing directories and file elements * of addpath, and append a proper trailing slash if a directory */#define APR_FILEPATH_TRUENAME       0x20/** * Merge additional file path onto the previously processed rootpath * @param newpath the merged paths returned * @param rootpath the root file path (NULL uses the current working path) * @param addpath the path to add to the root path * @param flags the desired APR_FILEPATH_ rules to apply when merging * @param p the pool to allocate the new path string from * @deffunc apr_status_t apr_filepath_merge(char **newpath, const char *rootpath, const char *addpath, apr_int32_t flags, apr_pool_t *p) */                        APR_DECLARE(apr_status_t)                 apr_filepath_merge(char **newpath, const char *rootpath,                                   const char *addpath, apr_int32_t flags,                                   apr_pool_t *p);#ifdef __cplusplus}#endif#endif  /* ! APR_FILE_INFO_H */

⌨️ 快捷键说明

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