summaryrefslogtreecommitdiffstats
path: root/rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c
diff options
context:
space:
mode:
Diffstat (limited to 'rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c')
-rw-r--r--rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c311
1 files changed, 0 insertions, 311 deletions
diff --git a/rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c b/rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c
deleted file mode 100644
index 9b0ae6e6..00000000
--- a/rubbos/app/httpd-2.0.64/srclib/apr/file_io/unix/filestat.c
+++ /dev/null
@@ -1,311 +0,0 @@
-/* Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "apr_arch_file_io.h"
-#include "apr_file_io.h"
-#include "apr_general.h"
-#include "apr_strings.h"
-#include "apr_errno.h"
-
-#ifdef HAVE_UTIME
-#include <utime.h>
-#endif
-
-static apr_filetype_e filetype_from_mode(mode_t mode)
-{
- apr_filetype_e type;
-
- switch (mode & S_IFMT) {
- case S_IFREG:
- type = APR_REG; break;
- case S_IFDIR:
- type = APR_DIR; break;
- case S_IFLNK:
- type = APR_LNK; break;
- case S_IFCHR:
- type = APR_CHR; break;
- case S_IFBLK:
- type = APR_BLK; break;
-#if defined(S_IFFIFO)
- case S_IFFIFO:
- type = APR_PIPE; break;
-#endif
-#if !defined(BEOS) && defined(S_IFSOCK)
- case S_IFSOCK:
- type = APR_SOCK; break;
-#endif
-
- default:
- /* Work around missing S_IFxxx values above
- * for Linux et al.
- */
-#if !defined(S_IFFIFO) && defined(S_ISFIFO)
- if (S_ISFIFO(mode)) {
- type = APR_PIPE;
- } else
-#endif
-#if !defined(BEOS) && !defined(S_IFSOCK) && defined(S_ISSOCK)
- if (S_ISSOCK(mode)) {
- type = APR_SOCK;
- } else
-#endif
- type = APR_UNKFILE;
- }
- return type;
-}
-
-static void fill_out_finfo(apr_finfo_t *finfo, struct stat *info,
- apr_int32_t wanted)
-{
- finfo->valid = APR_FINFO_MIN | APR_FINFO_IDENT | APR_FINFO_NLINK
- | APR_FINFO_OWNER | APR_FINFO_PROT;
- finfo->protection = apr_unix_mode2perms(info->st_mode);
- finfo->filetype = filetype_from_mode(info->st_mode);
- finfo->user = info->st_uid;
- finfo->group = info->st_gid;
- finfo->size = info->st_size;
- finfo->inode = info->st_ino;
- finfo->device = info->st_dev;
- finfo->nlink = info->st_nlink;
- apr_time_ansi_put(&finfo->atime, info->st_atime);
- apr_time_ansi_put(&finfo->mtime, info->st_mtime);
- apr_time_ansi_put(&finfo->ctime, info->st_ctime);
- /* ### needs to be revisited
- * if (wanted & APR_FINFO_CSIZE) {
- * finfo->csize = info->st_blocks * 512;
- * finfo->valid |= APR_FINFO_CSIZE;
- * }
- */
-}
-
-apr_status_t apr_file_info_get_locked(apr_finfo_t *finfo, apr_int32_t wanted,
- apr_file_t *thefile)
-{
- struct stat info;
-
- if (thefile->buffered) {
- apr_status_t rv = apr_file_flush_locked(thefile);
- if (rv != APR_SUCCESS)
- return rv;
- }
-
- if (fstat(thefile->filedes, &info) == 0) {
- finfo->pool = thefile->pool;
- finfo->fname = thefile->fname;
- fill_out_finfo(finfo, &info, wanted);
- return (wanted & ~finfo->valid) ? APR_INCOMPLETE : APR_SUCCESS;
- }
- else {
- return errno;
- }
-}
-
-APR_DECLARE(apr_status_t) apr_file_info_get(apr_finfo_t *finfo,
- apr_int32_t wanted,
- apr_file_t *thefile)
-{
- struct stat info;
-
- if (thefile->buffered) {
- apr_status_t rv = apr_file_flush(thefile);
- if (rv != APR_SUCCESS)
- return rv;
- }
-
- if (fstat(thefile->filedes, &info) == 0) {
- finfo->pool = thefile->pool;
- finfo->fname = thefile->fname;
- fill_out_finfo(finfo, &info, wanted);
- return (wanted & ~finfo->valid) ? APR_INCOMPLETE : APR_SUCCESS;
- }
- else {
- return errno;
- }
-}
-
-APR_DECLARE(apr_status_t) apr_file_perms_set(const char *fname,
- apr_fileperms_t perms)
-{
- mode_t mode = apr_unix_perms2mode(perms);
-
- if (chmod(fname, mode) == -1)
- return errno;
- return APR_SUCCESS;
-}
-
-APR_DECLARE(apr_status_t) apr_file_attrs_set(const char *fname,
- apr_fileattrs_t attributes,
- apr_fileattrs_t attr_mask,
- apr_pool_t *pool)
-{
- apr_status_t status;
- apr_finfo_t finfo;
-
- /* Don't do anything if we can't handle the requested attributes */
- if (!(attr_mask & (APR_FILE_ATTR_READONLY
- | APR_FILE_ATTR_EXECUTABLE)))
- return APR_SUCCESS;
-
- status = apr_stat(&finfo, fname, APR_FINFO_PROT, pool);
- if (!APR_STATUS_IS_SUCCESS(status))
- return status;
-
- /* ### TODO: should added bits be umask'd? */
- if (attr_mask & APR_FILE_ATTR_READONLY)
- {
- if (attributes & APR_FILE_ATTR_READONLY)
- {
- finfo.protection &= ~APR_UWRITE;
- finfo.protection &= ~APR_GWRITE;
- finfo.protection &= ~APR_WWRITE;
- }
- else
- {
- /* ### umask this! */
- finfo.protection |= APR_UWRITE;
- finfo.protection |= APR_GWRITE;
- finfo.protection |= APR_WWRITE;
- }
- }
-
- if (attr_mask & APR_FILE_ATTR_EXECUTABLE)
- {
- if (attributes & APR_FILE_ATTR_EXECUTABLE)
- {
- /* ### umask this! */
- finfo.protection |= APR_UEXECUTE;
- finfo.protection |= APR_GEXECUTE;
- finfo.protection |= APR_WEXECUTE;
- }
- else
- {
- finfo.protection &= ~APR_UEXECUTE;
- finfo.protection &= ~APR_GEXECUTE;
- finfo.protection &= ~APR_WEXECUTE;
- }
- }
-
- return apr_file_perms_set(fname, finfo.protection);
-}
-
-
-APR_DECLARE(apr_status_t) apr_file_mtime_set(const char *fname,
- apr_time_t mtime,
- apr_pool_t *pool)
-{
- apr_status_t status;
- apr_finfo_t finfo;
-
- status = apr_stat(&finfo, fname, APR_FINFO_ATIME, pool);
- if (!APR_STATUS_IS_SUCCESS(status)) {
- return status;
- }
-
-#ifdef HAVE_UTIMES
- {
- struct timeval tvp[2];
-
- tvp[0].tv_sec = apr_time_sec(finfo.atime);
- tvp[0].tv_usec = apr_time_usec(finfo.atime);
- tvp[1].tv_sec = apr_time_sec(mtime);
- tvp[1].tv_usec = apr_time_usec(mtime);
-
- if (utimes(fname, tvp) == -1) {
- return errno;
- }
- }
-#elif defined(HAVE_UTIME)
- {
- struct utimbuf buf;
-
- buf.actime = (time_t) (finfo.atime / APR_USEC_PER_SEC);
- buf.modtime = (time_t) (mtime / APR_USEC_PER_SEC);
-
- if (utime(fname, &buf) == -1) {
- return errno;
- }
- }
-#else
- return APR_ENOTIMPL;
-#endif
-
- return APR_SUCCESS;
-}
-
-
-APR_DECLARE(apr_status_t) apr_stat(apr_finfo_t *finfo,
- const char *fname,
- apr_int32_t wanted, apr_pool_t *pool)
-{
- struct stat info;
- int srv;
-
- if (wanted & APR_FINFO_LINK)
- srv = lstat(fname, &info);
- else
- srv = stat(fname, &info);
-
- if (srv == 0) {
- finfo->pool = pool;
- finfo->fname = fname;
- fill_out_finfo(finfo, &info, wanted);
- if (wanted & APR_FINFO_LINK)
- wanted &= ~APR_FINFO_LINK;
- return (wanted & ~finfo->valid) ? APR_INCOMPLETE : APR_SUCCESS;
- }
- else {
-#if !defined(ENOENT) || !defined(ENOTDIR)
-#error ENOENT || ENOTDIR not defined; please see the
-#error comments at this line in the source for a workaround.
- /*
- * If ENOENT || ENOTDIR is not defined in one of the your OS's
- * include files, APR cannot report a good reason why the stat()
- * of the file failed; there are cases where it can fail even though
- * the file exists. This opens holes in Apache, for example, because
- * it becomes possible for someone to get a directory listing of a
- * directory even though there is an index (eg. index.html) file in
- * it. If you do not have a problem with this, delete the above
- * #error lines and start the compile again. If you need to do this,
- * please submit a bug report to http://www.apache.org/bug_report.html
- * letting us know that you needed to do this. Please be sure to
- * include the operating system you are using.
- */
- /* WARNING: All errors will be handled as not found
- */
-#if !defined(ENOENT)
- return APR_ENOENT;
-#else
- /* WARNING: All errors but not found will be handled as not directory
- */
- if (errno != ENOENT)
- return APR_ENOENT;
- else
- return errno;
-#endif
-#else /* All was defined well, report the usual: */
- return errno;
-#endif
- }
-}
-
-/* Perhaps this becomes nothing but a macro?
- */
-APR_DECLARE(apr_status_t) apr_lstat(apr_finfo_t *finfo, const char *fname,
- apr_int32_t wanted, apr_pool_t *pool)
-{
- return apr_stat(finfo, fname, wanted | APR_FINFO_LINK, pool);
-}
-