/[mailutils]/mailutils/mailbox/file_stream.c
ViewVC logotype

Diff of /mailutils/mailbox/file_stream.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.31 by gray, Sat Dec 28 10:51:09 2002 UTC revision 1.32 by gray, Sat Jan 18 14:58:02 2003 UTC
# Line 218  _stdin_file_read (stream_t stream, char Line 218  _stdin_file_read (stream_t stream, char
218      nbytes = 0;      nbytes = 0;
219    else    else
220      {      {
221    status = _file_read (stream, optr, osize, fs_offset, &nbytes);        status = _file_read (stream, optr, osize, fs_offset, &nbytes);
222    if (status == 0 && nbytes)        if (status == 0 && nbytes)
223      {          {
224        size_t k;            size_t k;
225    
226        status = stream_write (fs->cache, optr, nbytes, fs_offset, &k);            status = stream_write (fs->cache, optr, nbytes, fs_offset, &k);
227        if (status)            if (status)
228          return status;              return status;
229        if (k != nbytes)            if (k != nbytes)
230          return EIO;              return EIO;
231        }          }
232      }      }
233    if (pnbytes)    if (pnbytes)
234      *pnbytes = nbytes;      *pnbytes = nbytes;
# Line 464  _file_open (stream_t stream) Line 464  _file_open (stream_t stream)
464  }  }
465    
466  int  int
467    _file_strerror (stream_t unused, const char **pstr)
468    {
469      *pstr = strerror (errno);
470      return 0;
471    }
472    
473    int
474  file_stream_create (stream_t *stream, const char* filename, int flags)  file_stream_create (stream_t *stream, const char* filename, int flags)
475  {  {
476    struct _file_stream *fs;    struct _file_stream *fs;
# Line 500  file_stream_create (stream_t *stream, co Line 507  file_stream_create (stream_t *stream, co
507    stream_set_size (*stream, _file_size, fs);    stream_set_size (*stream, _file_size, fs);
508    stream_set_flush (*stream, _file_flush, fs);    stream_set_flush (*stream, _file_flush, fs);
509    stream_set_destroy (*stream, _file_destroy, fs);    stream_set_destroy (*stream, _file_destroy, fs);
510      stream_set_strerror (*stream, _file_strerror, fs);
511      
512    return 0;    return 0;
513  }  }
514    
515  int  int
516  stdio_stream_create (stream_t *stream, FILE* file, int flags)  stdio_stream_create (stream_t *stream, FILE *file, int flags)
517  {  {
518    struct _file_stream *fs;    struct _file_stream *fs;
519    int ret;    int ret;
# Line 529  stdio_stream_create (stream_t *stream, F Line 537  stdio_stream_create (stream_t *stream, F
537        return ret;        return ret;
538      }      }
539    
540    if ((ret = memory_stream_create (&fs->cache, 0, MU_STREAM_RDWR))    /* Check if we need to enable caching */
541        || (ret = stream_open (fs->cache)))  
542      if ((flags & MU_STREAM_SEEKABLE) && lseek (fileno (file), 0, 0))
543      {      {
544        stream_destroy (stream, fs);        if ((ret = memory_stream_create (&fs->cache, 0, MU_STREAM_RDWR))
545        free (fs);            || (ret = stream_open (fs->cache)))
546        return ret;          {
547              stream_destroy (stream, fs);
548              free (fs);
549              return ret;
550            }
551          stream_set_read (*stream, _stdin_file_read, fs);
552          stream_set_readline (*stream, _stdin_file_readline, fs);
553          stream_set_write (*stream, _stdout_file_write, fs);
554      }      }
555      else
556        {
557          stream_set_read (*stream, _file_read, fs);
558          stream_set_readline (*stream, _file_readline, fs);
559          stream_set_write (*stream, _file_write, fs);
560        }
561      
562    /* We don't need to open the FILE, just return success. */    /* We don't need to open the FILE, just return success. */
563    
564    stream_set_open (*stream, NULL, fs);    stream_set_open (*stream, NULL, fs);
565    stream_set_close (*stream, _file_close, fs);    stream_set_close (*stream, _file_close, fs);
566    stream_set_fd (*stream, _file_get_fd, fs);    stream_set_fd (*stream, _file_get_fd, fs);
   stream_set_read (*stream, _stdin_file_read, fs);  
   stream_set_readline (*stream, _stdin_file_readline, fs);  
   stream_set_write (*stream, _stdout_file_write, fs);  
567    stream_set_flush (*stream, _file_flush, fs);    stream_set_flush (*stream, _file_flush, fs);
568    stream_set_destroy (*stream, _file_destroy, fs);    stream_set_destroy (*stream, _file_destroy, fs);
569    

Legend:
Removed from v.1.31  
changed lines
  Added in v.1.32

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26