diff options
-rw-r--r-- | lib/libfetch/Makefile | 14 | ||||
-rw-r--r-- | lib/libfetch/common.c | 56 | ||||
-rw-r--r-- | lib/libfetch/common.h | 2 | ||||
-rw-r--r-- | lib/libfetch/fetch.3 | 22 | ||||
-rw-r--r-- | lib/libfetch/fetch.c | 5 | ||||
-rw-r--r-- | lib/libfetch/fetch.h | 27 | ||||
-rw-r--r-- | lib/libfetch/fetch_err.et | 50 |
7 files changed, 49 insertions, 127 deletions
diff --git a/lib/libfetch/Makefile b/lib/libfetch/Makefile index b78a844..b85f402 100644 --- a/lib/libfetch/Makefile +++ b/lib/libfetch/Makefile @@ -7,11 +7,11 @@ CFLAGS+= -DINET6 .if !defined(DEBUG) CFLAGS+= -DNDEBUG .endif -SRCS= fetch.c common.c ftp.c http.c file.c fetch_err.c \ - fetch_err.h ftperr.h httperr.h -INCS= fetch.h ${.OBJDIR}/fetch_err.h +SRCS= fetch.c common.c ftp.c http.c file.c \ + ftperr.h httperr.h +INCS= fetch.h MAN3= fetch.3 -CLEANFILES= fetch_err.c fetch_err.h ftperr.h httperr.h +CLEANFILES= ftperr.h httperr.h SHLIB_MAJOR= 2 SHLIB_MINOR= 0 @@ -38,10 +38,4 @@ httperr.h: http.errors @echo " { -1, FETCH_UNKNOWN, \"Unknown HTTP error\" }" >> ${.TARGET} @echo "};" >> ${.TARGET} -hdrs: fetch_err.h - -.ORDER: fetch_err.c fetch_err.h -fetch_err.c fetch_err.h: fetch_err.et - compile_et ${.ALLSRC} - .include <bsd.lib.mk> diff --git a/lib/libfetch/common.c b/lib/libfetch/common.c index 789cad5..9ec6825 100644 --- a/lib/libfetch/common.c +++ b/lib/libfetch/common.c @@ -33,9 +33,9 @@ #include <sys/time.h> #include <netinet/in.h> -#include <com_err.h> #include <errno.h> #include <netdb.h> +#include <stdarg.h> #include <stdlib.h> #include <stdio.h> #include <string.h> @@ -58,31 +58,18 @@ static struct fetcherr _netdb_errlist[] = { { -1, FETCH_UNKNOWN, "Unknown resolver error" } }; -static int com_err_initialized; /*** Error-reporting functions ***********************************************/ /* - * Initialize the common error library - */ -static void -_fetch_init_com_err(void) -{ - initialize_ftch_error_table(); - com_err_initialized = 1; -} - -/* * Map error code to string */ -static int +static struct fetcherr * _fetch_finderr(struct fetcherr *p, int e) { - int i; - for (i = 0; p[i].num != -1; i++) - if (p[i].num == e) - break; - return i; + while (p->num != -1 && p->num != e) + p++; + return p; } /* @@ -91,14 +78,9 @@ _fetch_finderr(struct fetcherr *p, int e) void _fetch_seterr(struct fetcherr *p, int e) { - int n; - - if (!com_err_initialized) - _fetch_init_com_err(); - - n = _fetch_finderr(p, e); - fetchLastErrCode = p[n].cat; - com_err("libfetch", fetchLastErrCode, "(%03d %s)", e, p[n].string); + p = _fetch_finderr(p, e); + fetchLastErrCode = p->cat; + snprintf(fetchLastErrString, MAXERRSTRING, "%s", p->string); } /* @@ -110,9 +92,6 @@ _fetch_syserr(void) int e; e = errno; - if (!com_err_initialized) - _fetch_init_com_err(); - switch (errno) { case 0: fetchLastErrCode = FETCH_OK; @@ -163,34 +142,21 @@ _fetch_syserr(void) default: fetchLastErrCode = FETCH_UNKNOWN; } - com_err("libfetch", fetchLastErrCode, "(%03d %s)", e, strerror(e)); + snprintf(fetchLastErrString, MAXERRSTRING, "%s", strerror(e)); } /* * Emit status message */ -int +void _fetch_info(char *fmt, ...) { va_list ap; - char *s; - if (!com_err_initialized) - _fetch_init_com_err(); - va_start(ap, fmt); - vasprintf(&s, fmt, ap); + vfprintf(stderr, fmt, ap); va_end(ap); - - if (s == NULL) { - com_err("libfetch", FETCH_MEMORY, ""); - return -1; - } else { - com_err("libfetch", FETCH_VERBOSE, "%s", s); - free(s); - return 0; - } } diff --git a/lib/libfetch/common.h b/lib/libfetch/common.h index 35eefa2..79bd54d 100644 --- a/lib/libfetch/common.h +++ b/lib/libfetch/common.h @@ -40,7 +40,7 @@ struct fetcherr { void _fetch_seterr(struct fetcherr *p, int e); void _fetch_syserr(void); -int _fetch_info(char *fmt, ...); +void _fetch_info(char *fmt, ...); int _fetch_connect(char *host, int port, int af, int verbose); int _fetch_getln(int fd, char **buf, size_t *size, size_t *len); int _fetch_add_entry(struct url_ent **p, int *size, int *len, diff --git a/lib/libfetch/fetch.3 b/lib/libfetch/fetch.3 index f63089c..7c0ca07 100644 --- a/lib/libfetch/fetch.3 +++ b/lib/libfetch/fetch.3 @@ -328,13 +328,8 @@ functions return 0 on success and -1 on failure. All other functions return a stream pointer which may be used to access the requested document, or NULL if an error occurred. .Pp -.Nm Libfetch -uses the Common Error Library -.Nm ( libcom_err ) -to report errors. -The error code passed to -.Fn com_err -is one of: +The following error codes are defined in +.Aq Pa fetch.h : .Bl -tag -width 18n .It Bq Er FETCH_ABORT Operation aborted @@ -384,7 +379,6 @@ and environment variables, respectively, as the address of a proxy server to use for transferring files. .Sh SEE ALSO -.Xr com_err 3 , .Xr fetch 1 , .Xr ftpio 3 , .Xr ip 4 . @@ -413,14 +407,6 @@ to use for transferring files. .%B File Transfer Protocol .%O RFC959 .Re -.Sh NOTES -The -.Nm fetch -library uses the Common Error library, and applications which link -with -.Nm libfetch -must therefore also link with -.Nm libcom_err . .Sh HISTORY The .Nm fetch @@ -493,4 +479,8 @@ The HTTP code needs a complete rewrite, or at least a serious cleanup. .Pp The man page is poorly written and produces badly formatted text. .Pp +The error reporting mechanism is unsatisfactory. +.Pp +Some parts of the code are not fully reentrant. +.Pp Tons of other stuff. diff --git a/lib/libfetch/fetch.c b/lib/libfetch/fetch.c index ad9932f..08efeb8 100644 --- a/lib/libfetch/fetch.c +++ b/lib/libfetch/fetch.c @@ -40,8 +40,9 @@ #include "common.h" -int fetchLastErrCode; -int fetchTimeout; +int fetchLastErrCode; +char fetchLastErrString[MAXERRSTRING]; +int fetchTimeout; /*** Local data **************************************************************/ diff --git a/lib/libfetch/fetch.h b/lib/libfetch/fetch.h index 02df28a..beb43e6 100644 --- a/lib/libfetch/fetch.h +++ b/lib/libfetch/fetch.h @@ -31,9 +31,7 @@ #ifndef _FETCH_H_INCLUDED #define _FETCH_H_INCLUDED -#include <fetch_err.h> - -#define _LIBFETCH_VER "libfetch/1.0" +#define _LIBFETCH_VER "libfetch/2.0" #define URL_SCHEMELEN 16 #define URL_USERLEN 256 @@ -61,6 +59,27 @@ struct url_ent { struct url_stat stat; }; +/* Error codes */ +#define FETCH_ABORT 1 +#define FETCH_AUTH 2 +#define FETCH_DOWN 3 +#define FETCH_EXISTS 4 +#define FETCH_FULL 5 +#define FETCH_INFO 6 +#define FETCH_MEMORY 7 +#define FETCH_MOVED 8 +#define FETCH_NETWORK 9 +#define FETCH_OK 10 +#define FETCH_PROTO 11 +#define FETCH_RESOLV 12 +#define FETCH_SERVER 13 +#define FETCH_TEMP 14 +#define FETCH_TIMEOUT 15 +#define FETCH_UNAVAIL 16 +#define FETCH_UNKNOWN 17 +#define FETCH_URL 18 +#define FETCH_VERBOSE 19 + /* FILE-specific functions */ FILE *fetchGetFile(struct url *, char *); FILE *fetchPutFile(struct url *, char *); @@ -96,6 +115,8 @@ void fetchFreeURL(struct url *); /* Last error code */ extern int fetchLastErrCode; +#define MAXERRSTRING 256 +extern char fetchLastErrString[MAXERRSTRING]; extern int fetchTimeout; #endif diff --git a/lib/libfetch/fetch_err.et b/lib/libfetch/fetch_err.et deleted file mode 100644 index efaef74..0000000 --- a/lib/libfetch/fetch_err.et +++ /dev/null @@ -1,50 +0,0 @@ -#- -# Copyright (c) 1998 Dag-Erling Coïdan Smørgrav -# 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 -# in this position and unchanged. -# 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 name of the author may not be used to endorse or promote products -# derived from this software without specific prior written permission -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS 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 AUTHOR 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. -# -# $FreeBSD$ -# -et ftch - ec FETCH_ABORT, "Operation aborted" - ec FETCH_AUTH, "Authentication failed" - ec FETCH_DOWN, "Service unavailable" - ec FETCH_EXISTS, "File exists" - ec FETCH_FULL, "File system full" - ec FETCH_INFO, "Informational response" - ec FETCH_MEMORY, "Insufficient memory" - ec FETCH_MOVED, "File has moved" - ec FETCH_NETWORK, "Network error" - ec FETCH_OK, "No error" - ec FETCH_PROTO, "Protocol error" - ec FETCH_RESOLV, "Resolver error" - ec FETCH_SERVER, "Server error" - ec FETCH_TEMP, "Temporary error" - ec FETCH_TIMEOUT, "Operation timed out" - ec FETCH_UNAVAIL, "File is not available" - ec FETCH_UNKNOWN, "Unknown error" - ec FETCH_URL, "Invalid URL" - ec FETCH_VERBOSE, "Info:" -end |