diff options
author | Charles Longeau <chl@cvs.openbsd.org> | 2012-08-30 19:33:26 +0000 |
---|---|---|
committer | Charles Longeau <chl@cvs.openbsd.org> | 2012-08-30 19:33:26 +0000 |
commit | 992af837a8e67e4f5cf4c6aae93aa4c355642042 (patch) | |
tree | 10db110345c3baa7bec276ebc59d234eafbcc546 | |
parent | aea301efee5ad7534164bdef8e09060069d523b1 (diff) |
switch compress_backend to use FILE * instead of file descriptors, like
crypto_backend
ok gilles@
-rw-r--r-- | usr.sbin/smtpd/compress_backend.c | 10 | ||||
-rw-r--r-- | usr.sbin/smtpd/compress_gzip.c | 50 | ||||
-rw-r--r-- | usr.sbin/smtpd/queue_backend.c | 34 | ||||
-rw-r--r-- | usr.sbin/smtpd/smtpd.h | 10 |
4 files changed, 53 insertions, 51 deletions
diff --git a/usr.sbin/smtpd/compress_backend.c b/usr.sbin/smtpd/compress_backend.c index fec14d8739c..b285de302ed 100644 --- a/usr.sbin/smtpd/compress_backend.c +++ b/usr.sbin/smtpd/compress_backend.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compress_backend.c,v 1.4 2012/08/29 16:26:17 gilles Exp $ */ +/* $OpenBSD: compress_backend.c,v 1.5 2012/08/30 19:33:25 chl Exp $ */ /* * Copyright (c) 2012 Charles Longeau <chl@openbsd.org> @@ -43,15 +43,15 @@ compress_backend_lookup(const char *name) } int -compress_file(int fdin, int fdout) +compress_file(FILE *in, FILE *out) { - return env->sc_compress->compress_file(fdin, fdout); + return env->sc_compress->compress_file(in, out); } int -uncompress_file(int fdin, int fdout) +uncompress_file(FILE *in, FILE *out) { - return env->sc_compress->uncompress_file(fdin, fdout); + return env->sc_compress->uncompress_file(in, out); } size_t diff --git a/usr.sbin/smtpd/compress_gzip.c b/usr.sbin/smtpd/compress_gzip.c index e2b86b1b76d..28578548e79 100644 --- a/usr.sbin/smtpd/compress_gzip.c +++ b/usr.sbin/smtpd/compress_gzip.c @@ -1,4 +1,4 @@ -/* $OpenBSD: compress_gzip.c,v 1.1 2012/08/26 13:38:43 gilles Exp $ */ +/* $OpenBSD: compress_gzip.c,v 1.2 2012/08/30 19:33:25 chl Exp $ */ /* * Copyright (c) 2012 Gilles Chehade <gilles@openbsd.org> @@ -41,8 +41,8 @@ #define GZIP_BUFFER_SIZE 8192 -static int compress_file_gzip(int, int); -static int uncompress_file_gzip(int, int); +static int compress_file_gzip(FILE *, FILE *); +static int uncompress_file_gzip(FILE *, FILE *); static size_t compress_buffer_gzip(const char *, size_t, char *, size_t); static size_t uncompress_buffer_gzip(const char *, size_t, char *, size_t); @@ -54,62 +54,60 @@ struct compress_backend compress_gzip = { }; static int -compress_file_gzip(int fdin, int fdout) +compress_file_gzip(FILE *in, FILE *out) { - gzFile gzfd; - char buf[GZIP_BUFFER_SIZE]; + gzFile gzf; + char ibuf[GZIP_BUFFER_SIZE]; int r, w; int ret = 0; - if (fdin == -1 || fdout == -1) + if (in == NULL || out == NULL) return (0); - gzfd = gzdopen(fdout, "wb"); - if (gzfd == NULL) + gzf = gzdopen(fileno(out), "wb"); + if (gzf == NULL) return (0); - while ((r = read(fdin, buf, sizeof(buf))) > 0) { - w = gzwrite(gzfd, buf, r); - if (w != r) + while ((r = fread(ibuf, 1, GZIP_BUFFER_SIZE, in)) != 0) { + if ((w = gzwrite(gzf, ibuf, r)) != r) goto end; } - if (r == -1) + if (! feof(in)) goto end; ret = 1; end: - gzclose(gzfd); + gzclose(gzf); return (ret); } static int -uncompress_file_gzip(int fdin, int fdout) +uncompress_file_gzip(FILE *in, FILE *out) { - gzFile gzfd; - char buf[GZIP_BUFFER_SIZE]; + gzFile gzf; + char obuf[GZIP_BUFFER_SIZE]; int r, w; int ret = 0; - if (fdin == -1 || fdout == -1) + if (in == NULL || out == NULL) return (0); - - gzfd = gzdopen(fdin, "r"); - if (gzfd == NULL) + + gzf = gzdopen(fileno(in), "r"); + if (gzf == NULL) return (0); - while ((r = gzread(gzfd, buf, sizeof(buf))) > 0) { - w = write(fdout, buf, r); - if (w != r) + while ((r = gzread(gzf, obuf, sizeof(obuf))) > 0) { + if ((w = fwrite(obuf, r, 1, out)) != 1) goto end; } - if (r == -1) + if (! gzeof(gzf)) goto end; ret = 1; end: - gzclose(gzfd); + gzclose(gzf); return (ret); } diff --git a/usr.sbin/smtpd/queue_backend.c b/usr.sbin/smtpd/queue_backend.c index 5eac3b478c4..c65a26bc9ca 100644 --- a/usr.sbin/smtpd/queue_backend.c +++ b/usr.sbin/smtpd/queue_backend.c @@ -1,4 +1,4 @@ -/* $OpenBSD: queue_backend.c,v 1.36 2012/08/30 19:28:40 chl Exp $ */ +/* $OpenBSD: queue_backend.c,v 1.37 2012/08/30 19:33:25 chl Exp $ */ /* * Copyright (c) 2011 Gilles Chehade <gilles@openbsd.org> @@ -102,7 +102,6 @@ queue_message_commit(uint32_t msgid) { char msgpath[MAXPATHLEN]; char tmppath[MAXPATHLEN]; - int fdin = -1, fdout = -1; FILE *ifp = NULL; FILE *ofp = NULL; @@ -112,14 +111,16 @@ queue_message_commit(uint32_t msgid) if (env->sc_queue_flags & QUEUE_COMPRESS) { bsnprintf(tmppath, sizeof tmppath, "%s.comp", msgpath); - fdin = open(msgpath, O_RDONLY); - fdout = open(tmppath, O_RDWR | O_CREAT | O_EXCL, 0600); - if (fdin == -1 || fdout == -1) + ifp = fopen(msgpath, "r"); + ofp = fopen(tmppath, "w+"); + if (ifp == NULL || ofp == NULL) goto err; - if (! compress_file(fdin, fdout)) + if (! compress_file(ifp, ofp)) goto err; - close(fdin); - close(fdout); + fclose(ifp); + fclose(ofp); + ifp = NULL; + ofp = NULL; if (rename(tmppath, msgpath) == -1) { if (errno == ENOSPC) @@ -153,10 +154,6 @@ queue_message_commit(uint32_t msgid) return env->sc_queue->message(QOP_COMMIT, &msgid); err: - if (fdin != -1) - close(fdin); - if (fdout != -1) - close(fdout); if (ifp) fclose(ifp); if (ofp) @@ -196,10 +193,17 @@ queue_message_fd_r(uint32_t msgid) if (env->sc_queue_flags & QUEUE_COMPRESS) { fdout = mktmpfile(); - if (! uncompress_file(fdin, fdout)) + ifp = fdopen(fdin, "r"); + ofp = fdopen(fdout, "w+"); + if (ifp == NULL || ofp == NULL) goto err; - close(fdin); - fdin = fdout; + if (! uncompress_file(ifp, ofp)) + goto err; + fseek(ofp, SEEK_SET, 0); + fdin = fileno(ofp); + fclose(ifp); + ifp = NULL; + ofp = NULL; } return (fdin); diff --git a/usr.sbin/smtpd/smtpd.h b/usr.sbin/smtpd/smtpd.h index 92343b4fbf8..8705507dbf8 100644 --- a/usr.sbin/smtpd/smtpd.h +++ b/usr.sbin/smtpd/smtpd.h @@ -1,4 +1,4 @@ -/* $OpenBSD: smtpd.h,v 1.342 2012/08/30 18:25:44 gilles Exp $ */ +/* $OpenBSD: smtpd.h,v 1.343 2012/08/30 19:33:25 chl Exp $ */ /* * Copyright (c) 2008 Gilles Chehade <gilles@openbsd.org> @@ -819,8 +819,8 @@ struct queue_backend { }; struct compress_backend { - int (*compress_file)(int, int); - int (*uncompress_file)(int, int); + int (*compress_file)(FILE *, FILE *); + int (*uncompress_file)(FILE *, FILE *); size_t (*compress_buffer)(const char *, size_t, char *, size_t); size_t (*uncompress_buffer)(const char *, size_t, char *, size_t); }; @@ -1100,8 +1100,8 @@ void qwalk_close(void *); /* compress_backend.c */ struct compress_backend *compress_backend_lookup(const char *); -int compress_file(int, int); -int uncompress_file(int, int); +int compress_file(FILE *, FILE *); +int uncompress_file(FILE *, FILE *); size_t compress_buffer(const char *, size_t, char *, size_t); size_t uncompress_buffer(const char *, size_t, char *, size_t); |