Add new set_binary feature to estream

This commit is contained in:
Werner Koch 2010-07-24 13:33:03 +00:00
parent a22c38baad
commit 57a3538555
5 changed files with 52 additions and 7 deletions

View File

@ -1,3 +1,7 @@
2010-07-24 Werner Koch <wk@g10code.com>
* estream.c (es_set_binary): New.
2010-07-19 Werner Koch <wk@g10code.com>
* utf8conv.c (utf8_to_wchar): s/malloc/jnlib_malloc/.

View File

@ -3399,6 +3399,39 @@ es_setbuf (estream_t ES__RESTRICT stream, char *ES__RESTRICT buf)
ESTREAM_UNLOCK (stream);
}
/* Put a stream into binary mode. This is only needed for the
standard streams if they are to be used in a binary way. On Unix
systems it is never needed but MSDOS based systems require such a
call. It needs to be called before any I/O is done on STREAM. */
void
es_set_binary (estream_t stream)
{
ESTREAM_LOCK (stream);
if (!(stream->intern->modeflags & O_BINARY))
{
stream->intern->modeflags |= O_BINARY;
#ifdef HAVE_DOSISH_SYSTEM
if (stream->intern->func_dest.func_read == es_func_fd_read)
{
estream_cookie_fd_t fd_cookie;
if (!IS_INVALID_FD (fd_cookie->fd))
setmode (fd, O_BINARY);
}
else if (stream->intern->func_dest.func_read == es_func_fp_read)
{
estream_cookie_fp_t fp_cookie;
if (fp_cookie->fd)
setmode (fileno (fp_cookie->fp), O_BINARY);
}
#endif
}
ESTREAM_UNLOCK (stream);
}
void
es_opaque_set (estream_t stream, void *opaque)
{

View File

@ -125,6 +125,7 @@
#define es_vfprintf_unlocked _ESTREAM_PREFIX(es_vfprint_unlocked)
#define es_setvbuf _ESTREAM_PREFIX(es_setvbuf)
#define es_setbuf _ESTREAM_PREFIX(es_setbuf)
#define es_set_binary _ESTREAM_PREFIX(es_set_binary)
#define es_tmpfile _ESTREAM_PREFIX(es_tmpfile)
#define es_opaque_set _ESTREAM_PREFIX(es_opaque_set)
#define es_opaque_get _ESTREAM_PREFIX(es_opaque_get)
@ -355,6 +356,9 @@ int es_setvbuf (estream_t ES__RESTRICT stream,
char *ES__RESTRICT buf, int mode, size_t size);
void es_setbuf (estream_t ES__RESTRICT stream, char *ES__RESTRICT buf);
void es_set_binary (estream_t stream);
estream_t es_tmpfile (void);
void es_opaque_set (estream_t ES__RESTRICT stream, void *ES__RESTRICT opaque);

View File

@ -1,3 +1,8 @@
2010-07-24 Werner Koch <wk@g10code.com>
* dirmngr_ldap.c (main): Init common subsystems. Call
es_set_binary.
2010-07-19 Werner Koch <wk@g10code.com>
* dirmngr.c: Include ldap-wrapper.h.

View File

@ -171,18 +171,17 @@ main (int argc, char **argv )
char *p;
int only_search_timeout = 0;
#ifdef HAVE_W32_SYSTEM
/* Yeah, right. Sigh. */
#error FIXME
_setmode (_fileno (stdout), _O_BINARY);
#endif
set_strusage (my_strusage);
log_set_prefix ("dirmngr_ldap", JNLIB_LOG_WITH_PREFIX);
/* Setup I18N. */
/* Setup I18N and common subsystems. */
i18n_init();
init_common_subsystems (&argc, &argv);
es_set_binary (es_stdout);
/* LDAP defaults */
opt.timeout.tv_sec = DEFAULT_LDAP_TIMEOUT;
opt.timeout.tv_usec = 0;