aboutsummaryrefslogtreecommitdiffstats
path: root/common/estream.c
diff options
context:
space:
mode:
authorWerner Koch <[email protected]>2010-03-10 17:22:23 +0000
committerWerner Koch <[email protected]>2010-03-10 17:22:23 +0000
commit02566c5856165ae5c85e7deb7adf7eafeea566ad (patch)
tree43fcf64c9bcf329d87efced082309c7c9bd9a2f7 /common/estream.c
parentMerged jnlib into common. (diff)
downloadgnupg-02566c5856165ae5c85e7deb7adf7eafeea566ad.tar.gz
gnupg-02566c5856165ae5c85e7deb7adf7eafeea566ad.zip
Change logging to use estream. The makes logging to a socket also
work on Solaris etc. Further changes required.. This is just a first step.
Diffstat (limited to '')
-rw-r--r--common/estream.c67
1 files changed, 54 insertions, 13 deletions
diff --git a/common/estream.c b/common/estream.c
index af7da7052..dfa2de4aa 100644
--- a/common/estream.c
+++ b/common/estream.c
@@ -869,7 +869,10 @@ es_func_fp_read (void *cookie, void *buffer, size_t size)
estream_cookie_fp_t file_cookie = cookie;
ssize_t bytes_read;
- bytes_read = fread (buffer, 1, size, file_cookie->fp);
+ if (file_cookie->fp)
+ bytes_read = fread (buffer, 1, size, file_cookie->fp);
+ else
+ bytes_read = 0;
if (!bytes_read && ferror (file_cookie->fp))
return -1;
return bytes_read;
@@ -883,7 +886,11 @@ es_func_fp_write (void *cookie, const void *buffer, size_t size)
estream_cookie_fp_t file_cookie = cookie;
size_t bytes_written;
- bytes_written = fwrite (buffer, 1, size, file_cookie->fp);
+
+ if (file_cookie->fp)
+ bytes_written = fwrite (buffer, 1, size, file_cookie->fp);
+ else
+ bytes_written = size; /* Successfully written to the bit bucket. */
if (bytes_written != size)
return -1;
return bytes_written;
@@ -896,17 +903,25 @@ es_func_fp_seek (void *cookie, off_t *offset, int whence)
estream_cookie_fp_t file_cookie = cookie;
long int offset_new;
+ if (!file_cookie->fp)
+ {
+ _set_errno (ESPIPE);
+ return -1;
+ }
+
if ( fseek (file_cookie->fp, (long int)*offset, whence) )
{
- fprintf (stderr, "\nfseek failed: errno=%d (%s)\n", errno,strerror (errno));
- return -1;
+ /* fprintf (stderr, "\nfseek failed: errno=%d (%s)\n", */
+ /* errno,strerror (errno)); */
+ return -1;
}
offset_new = ftell (file_cookie->fp);
if (offset_new == -1)
{
- fprintf (stderr, "\nftell failed: errno=%d (%s)\n", errno,strerror (errno));
- return -1;
+ /* fprintf (stderr, "\nftell failed: errno=%d (%s)\n", */
+ /* errno,strerror (errno)); */
+ return -1;
}
*offset = offset_new;
return 0;
@@ -921,8 +936,13 @@ es_func_fp_destroy (void *cookie)
if (fp_cookie)
{
- fflush (fp_cookie->fp);
- err = fp_cookie->no_close? 0 : fclose (fp_cookie->fp);
+ if (fp_cookie->fp)
+ {
+ fflush (fp_cookie->fp);
+ err = fp_cookie->no_close? 0 : fclose (fp_cookie->fp);
+ }
+ else
+ err = 0;
mem_free (fp_cookie);
}
else
@@ -2268,13 +2288,14 @@ do_fpopen (FILE *fp, const char *mode, int no_close)
if (err)
goto out;
- fflush (fp);
+ if (fp)
+ fflush (fp);
err = es_func_fp_create (&cookie, fp, modeflags, no_close);
if (err)
goto out;
-
+
create_called = 1;
- err = es_create (&stream, cookie, fileno (fp), estream_functions_fp,
+ err = es_create (&stream, cookie, fp? fileno (fp):-1, estream_functions_fp,
modeflags);
out:
@@ -2738,6 +2759,17 @@ es_fgets (char *ES__RESTRICT buffer, int length, estream_t ES__RESTRICT stream)
int
+es_fputs_unlocked (const char *ES__RESTRICT s, estream_t ES__RESTRICT stream)
+{
+ size_t length;
+ int err;
+
+ length = strlen (s);
+ err = es_writen (stream, s, length, NULL);
+ return err ? EOF : 0;
+}
+
+int
es_fputs (const char *ES__RESTRICT s, estream_t ES__RESTRICT stream)
{
size_t length;
@@ -2932,6 +2964,15 @@ es_free (void *a)
int
+es_vfprintf_unlocked (estream_t ES__RESTRICT stream,
+ const char *ES__RESTRICT format,
+ va_list ap)
+{
+ return es_print (stream, format, ap);
+}
+
+
+int
es_vfprintf (estream_t ES__RESTRICT stream, const char *ES__RESTRICT format,
va_list ap)
{
@@ -2945,9 +2986,9 @@ es_vfprintf (estream_t ES__RESTRICT stream, const char *ES__RESTRICT format,
}
-static int
+int
es_fprintf_unlocked (estream_t ES__RESTRICT stream,
- const char *ES__RESTRICT format, ...)
+ const char *ES__RESTRICT format, ...)
{
int ret;