From e99e43cd531c4ba26bb1b2fbc0e356f95126ae24 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Wed, 13 Jan 1999 13:12:50 +0000 Subject: See ChangeLog: Wed Jan 13 14:10:15 CET 1999 Werner Koch --- util/ChangeLog | 4 ++++ util/iobuf.c | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+) (limited to 'util') diff --git a/util/ChangeLog b/util/ChangeLog index 596dd8f2c..7c4fb3bb7 100644 --- a/util/ChangeLog +++ b/util/ChangeLog @@ -1,3 +1,7 @@ +Wed Jan 13 14:10:15 CET 1999 Werner Koch + + * iobuf.c (iobuf_fdopen): New. + Sat Jan 9 16:02:23 CET 1999 Werner Koch * secmem.c (lock_pool): add another check that setuid() worked. diff --git a/util/iobuf.c b/util/iobuf.c index b6314527a..b62da6dfa 100644 --- a/util/iobuf.c +++ b/util/iobuf.c @@ -549,6 +549,38 @@ iobuf_open( const char *fname ) return a; } +/**************** + * Create a head iobuf for reading from a file + * returns: NULL if an error occures and sets errno + */ +IOBUF +iobuf_fdopen( int fd, const char *mode ) +{ + IOBUF a; + FILE *fp; + file_filter_ctx_t *fcx; + size_t len; + + if( strchr( mode, 'w' ) ) + log_bug("iobuf_fdopen: mode `%s' is not supported", mode); + + if( !(fp = fdopen(fd, mode)) ) + return NULL; + a = iobuf_alloc(1, 8192 ); + fcx = m_alloc( sizeof *fcx + 20 ); + fcx->fp = fp; + fcx->print_only_name = 1; + sprintf(fcx->fname, "[fd %d]", fd ); + a->filter = file_filter; + a->filter_ov = fcx; + file_filter( fcx, IOBUFCTRL_DESC, NULL, (byte*)&a->desc, &len ); + file_filter( fcx, IOBUFCTRL_INIT, NULL, NULL, &len ); + if( DBG_IOBUF ) + log_debug("iobuf-%d.%d: fdopen `%s'\n", a->no, a->subno, fcx->fname ); + + return a; +} + /**************** * create an iobuf for writing to a file; the file will be created. */ -- cgit v1.2.3