mirror of
https://github.com/isc-projects/bind9.git
synced 2026-06-10 22:50:00 -04:00
Moved posix_result from file.c to errno2result.[ch], for use by multiple
source files. We may want to generalize this as part of the libisc API, but with a better name.
This commit is contained in:
parent
8adf1b9e74
commit
0c73b546ec
7 changed files with 107 additions and 76 deletions
|
|
@ -30,7 +30,7 @@ CWARNINGS =
|
|||
|
||||
# Alphabetically
|
||||
UNIXOBJS = @ISC_ISCIPV6_O@ \
|
||||
unix/app.@O@ unix/dir.@O@ unix/file.@O@ \
|
||||
unix/app.@O@ unix/dir.@O@ unix/errno2result.@O@ unix/file.@O@ \
|
||||
unix/interfaceiter.@O@ unix/net.@O@ unix/socket.@O@ \
|
||||
unix/time.@O@ unix/stdtime.@O@
|
||||
|
||||
|
|
|
|||
|
|
@ -28,13 +28,13 @@ CWARNINGS =
|
|||
|
||||
# Alphabetically
|
||||
OBJS = @ISC_IPV6_O@ \
|
||||
app.@O@ dir.@O@ file.@O@ interfaceiter.@O@ net.@O@ \
|
||||
socket.@O@ stdtime.@O@ time.@O@
|
||||
app.@O@ dir.@O@ errno2result.@O@ file.@O@ interfaceiter.@O@ \
|
||||
net.@O@ socket.@O@ stdtime.@O@ time.@O@
|
||||
|
||||
# Alphabetically
|
||||
SRCS = @ISC_IPV6_C@ \
|
||||
app.c dir.c file.c interfaceiter.c net.c \
|
||||
socket.c stdtime.c time.c
|
||||
app.c dir.c errno2result.c file.c interfaceiter.c \
|
||||
net.c socket.c stdtime.c time.c
|
||||
|
||||
SUBDIRS = include
|
||||
TARGETS = ${OBJS}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
/* $Id: dir.c,v 1.9 2000/05/08 14:37:54 tale Exp $ */
|
||||
/* $Id: dir.c,v 1.10 2000/05/11 15:09:27 tale Exp $ */
|
||||
|
||||
/* Principal Authors: DCL */
|
||||
|
||||
|
|
@ -25,12 +25,14 @@
|
|||
#include <unistd.h>
|
||||
|
||||
#include <isc/dir.h>
|
||||
#include <isc/magic.h>
|
||||
#include <isc/string.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
#include "errno2result.h"
|
||||
|
||||
#define ISC_DIR_MAGIC 0x4449522aU /* DIR*. */
|
||||
#define VALID_DIR(dir) ((dir) != NULL && \
|
||||
(dir)->magic == ISC_DIR_MAGIC)
|
||||
#define VALID_DIR(dir) ISC_MAGIC_VALID(dir, ISC_DIR_MAGIC)
|
||||
|
||||
void
|
||||
isc_dir_init(isc_dir_t *dir) {
|
||||
|
|
@ -60,20 +62,8 @@ isc_dir_open(isc_dir_t *dir, const char *dirname) {
|
|||
*/
|
||||
dir->handle = opendir(dirname);
|
||||
|
||||
if (dir->handle == NULL) {
|
||||
if (errno == ENOMEM)
|
||||
result = ISC_R_NOMEMORY;
|
||||
else if (errno == EPERM)
|
||||
result = ISC_R_NOPERM;
|
||||
else if (errno == ENOENT)
|
||||
result = ISC_R_NOTFOUND;
|
||||
else {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"opendir(%s) failed: %s",
|
||||
dirname, strerror(errno));
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
if (dir->handle == NULL)
|
||||
return isc__errno2result(errno);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
|
@ -148,20 +138,8 @@ isc_dir_chdir(const char *dirname) {
|
|||
|
||||
REQUIRE(dirname != NULL);
|
||||
|
||||
if (chdir(dirname) < 0) {
|
||||
if (errno == ENOENT)
|
||||
return (ISC_R_NOTFOUND);
|
||||
else if (errno == EACCES)
|
||||
return (ISC_R_NOPERM);
|
||||
else if (errno == ENOMEM)
|
||||
return (ISC_R_NOMEMORY);
|
||||
else {
|
||||
UNEXPECTED_ERROR(__FILE__, __LINE__,
|
||||
"chdir(%s) failed: %s",
|
||||
dirname, strerror(errno));
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
if (chdir(dirname) < 0)
|
||||
return (isc__errno2result(errno));
|
||||
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
|
|||
58
lib/isc/unix/errno2result.c
Normal file
58
lib/isc/unix/errno2result.c
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* Copyright (C) 2000 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <errno.h>
|
||||
|
||||
#include <isc/result.h>
|
||||
|
||||
#include "errno2result.h"
|
||||
|
||||
/*
|
||||
* Convert a POSIX errno value into an isc_result_t. The
|
||||
* list of supported errno values is not complete; new users
|
||||
* of this function should add any expected errors that are
|
||||
* not already there.
|
||||
*/
|
||||
isc_result_t
|
||||
isc__errno2result(int posixerrno) {
|
||||
switch (posixerrno) {
|
||||
case ENOTDIR:
|
||||
case ELOOP:
|
||||
case EINVAL:
|
||||
case ENAMETOOLONG:
|
||||
case EBADF:
|
||||
return (ISC_R_INVALIDFILE);
|
||||
case ENOENT:
|
||||
return (ISC_R_FILENOTFOUND);
|
||||
case EACCES:
|
||||
return (ISC_R_NOPERM);
|
||||
case EEXIST:
|
||||
return (ISC_R_FILEEXISTS);
|
||||
case EIO:
|
||||
return (ISC_R_IOERROR);
|
||||
case ENOMEM:
|
||||
return (ISC_R_NOMEMORY);
|
||||
default:
|
||||
/*
|
||||
* XXXDCL would be nice if perhaps this function could
|
||||
* return the system's error string, so the caller
|
||||
* might have something more descriptive than "unexpected
|
||||
* error" to log with.
|
||||
*/
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
21
lib/isc/unix/errno2result.h
Normal file
21
lib/isc/unix/errno2result.h
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
/*
|
||||
* Copyright (C) 2000 Internet Software Consortium.
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS
|
||||
* ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE
|
||||
* CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
* DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
|
||||
* PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
|
||||
* ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
|
||||
* SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <isc/types.h>
|
||||
|
||||
isc_result_t
|
||||
isc__errno2result(int posixerrno);
|
||||
|
|
@ -28,35 +28,7 @@
|
|||
#include <isc/time.h>
|
||||
#include <isc/util.h>
|
||||
|
||||
/*
|
||||
* Convert a POSIX errno value into an isc_result_t. The
|
||||
* list of supported errno values is not complete; new users
|
||||
* of this function should add any expected errors that are
|
||||
* not already there.
|
||||
*/
|
||||
static isc_result_t
|
||||
posix_result(int posixerrno) {
|
||||
switch (posixerrno) {
|
||||
case ENOTDIR:
|
||||
case ELOOP:
|
||||
case EINVAL:
|
||||
case ENAMETOOLONG:
|
||||
case EBADF:
|
||||
return (ISC_R_INVALIDFILE);
|
||||
case ENOENT:
|
||||
return (ISC_R_FILENOTFOUND);
|
||||
case EACCES:
|
||||
return (ISC_R_NOPERM);
|
||||
case EEXIST:
|
||||
return (ISC_R_FILEEXISTS);
|
||||
case EIO:
|
||||
return (ISC_R_IOERROR);
|
||||
case ENOMEM:
|
||||
return (ISC_R_NOMEMORY);
|
||||
default:
|
||||
return (ISC_R_UNEXPECTED);
|
||||
}
|
||||
}
|
||||
#include "errno2result.h"
|
||||
|
||||
/*
|
||||
* XXXDCL As the API for accessing file statistics undoubtedly gets expanded,
|
||||
|
|
@ -71,7 +43,7 @@ file_stats(const char *file, struct stat *stats) {
|
|||
isc_result_t result = ISC_R_SUCCESS;
|
||||
|
||||
if (stat(file, stats) != 0)
|
||||
result = posix_result(errno);
|
||||
result = isc__errno2result(errno);
|
||||
|
||||
return (result);
|
||||
}
|
||||
|
|
@ -138,11 +110,11 @@ isc_file_openunique(char *templet, FILE **fp) {
|
|||
fd = mkstemp(templet);
|
||||
|
||||
if (fd == -1)
|
||||
result = posix_result(errno);
|
||||
result = isc__errno2result(errno);
|
||||
if (result == ISC_R_SUCCESS) {
|
||||
f = fdopen(fd, "w+");
|
||||
if (f == NULL) {
|
||||
result = posix_result(errno);
|
||||
result = isc__errno2result(errno);
|
||||
(void)remove(templet);
|
||||
(void)close(fd);
|
||||
|
||||
|
|
@ -159,7 +131,7 @@ isc_file_fopen(const char *filename, const char *mode, FILE **fp) {
|
|||
|
||||
f = fopen(filename, mode);
|
||||
if (f == NULL)
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
*fp = f;
|
||||
return (ISC_R_SUCCESS);
|
||||
}
|
||||
|
|
@ -172,7 +144,7 @@ isc_file_fclose(FILE *f) {
|
|||
if (r == 0)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -183,7 +155,7 @@ isc_file_fseek(FILE *f, long offset, int whence) {
|
|||
if (r == 0)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -197,7 +169,7 @@ isc_file_fread(void *ptr, size_t size, size_t nmemb, FILE *f, size_t *nret) {
|
|||
if (feof(f))
|
||||
result = ISC_R_EOF;
|
||||
else
|
||||
result = posix_result(errno);
|
||||
result = isc__errno2result(errno);
|
||||
}
|
||||
if (nret != NULL)
|
||||
*nret = r;
|
||||
|
|
@ -212,7 +184,7 @@ isc_file_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *f, size_t *nre
|
|||
clearerr(f);
|
||||
r = fwrite(ptr, size, nmemb, f);
|
||||
if (r != nmemb)
|
||||
result = posix_result(errno);
|
||||
result = isc__errno2result(errno);
|
||||
if (nret != NULL)
|
||||
*nret = r;
|
||||
return (result);
|
||||
|
|
@ -226,7 +198,7 @@ isc_file_fflush(FILE *f) {
|
|||
if (r == 0)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -237,7 +209,7 @@ isc_file_ffsync(FILE *f) {
|
|||
if (r == 0)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
}
|
||||
|
||||
isc_result_t
|
||||
|
|
@ -248,5 +220,5 @@ isc_file_remove(const char *filename) {
|
|||
if (r == 0)
|
||||
return (ISC_R_SUCCESS);
|
||||
else
|
||||
return (posix_result(errno));
|
||||
return (isc__errno2result(errno));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -705,6 +705,8 @@
|
|||
./lib/isc/unix/Makefile.in MAKE 1998,1999,2000
|
||||
./lib/isc/unix/app.c C 1999,2000
|
||||
./lib/isc/unix/dir.c C 1999,2000
|
||||
./lib/isc/unix/errno2isc.c C 2000
|
||||
./lib/isc/unix/errno2isc.h C 2000
|
||||
./lib/isc/unix/file.c C 2000
|
||||
./lib/isc/unix/ifiter_ioctl.c C 1999,2000
|
||||
./lib/isc/unix/ifiter_sysctl.c C 1999,2000
|
||||
|
|
|
|||
Loading…
Reference in a new issue