Files
evolution/camel/camel-stream-buffer.h
Jeffrey Stedfast 2a5e8cb179 Removed. (stream_write): Keep looping (non-blocking case) if errno is
2001-10-29  Jeffrey Stedfast  <fejj@ximian.com>

	* camel-tcp-stream-openssl.c (my_SSL_write): Removed.
	(stream_write): Keep looping (non-blocking case) if errno is
	EAGAIN, EINTR or EWOULDBLOCK. For NONBLOCKing I/O, sync up with
	CamelTcpStreamRaw. As with CamelTcpStreamRaw/SSL - make sure to
	write out everything before returning.
	(my_SSL_read): Removed.
	(stream_read): Just call ssl_error_to_errno() and check the errno
	values that we care about so we can keep the general look of all
	this stream code the same. Also when checking the return value of
	SSL_read, check for <0 instead of ==-1 since the man page for
	SSL_read doesn't say it will return -1 on fail, it just says <0.
	(stream_flush): Don't fsync() since syncing on a socket is a Bad
	Thing (tm).

	* camel-tcp-stream-ssl.c (stream_write): Make sure we write out
	everything just like in camel-tcp-stream-raw.c.

	* camel-stream-buffer.c (camel_stream_buffer_gets): If
	camel_stream_read() returns -1, don't necessarily return -1 to our
	caller since it's possible that we did actually "read" some data
	(ie, we copied some pre-buffered data into the out buffer).

	* camel-stream-buffer.h: Removed CAMEL_STREAM_BUFFER_NEWLINE since
	it never got used anywhere and it isn't supported anyway.

svn path=/trunk/; revision=14409
2001-10-30 03:09:01 +00:00

107 lines
3.0 KiB
C

/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- */
/* camel-stream-buffer.h :stream which buffers another stream */
/*
*
* Author :
* Michael Zucchi <notzed@ximian.com>
*
* Copyright 2000 Ximian Inc. (www.ximian.com) .
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of version 2 of the GNU General Public
* License as published by the Free Software Foundation.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
* USA
*/
#ifndef CAMEL_STREAM_BUFFER_H
#define CAMEL_STREAM_BUFFER_H 1
#ifdef __cplusplus
extern "C" {
#pragma }
#endif /* __cplusplus }*/
#include <stdio.h>
#include <camel/camel-seekable-stream.h>
#define CAMEL_STREAM_BUFFER_TYPE (camel_stream_buffer_get_type ())
#define CAMEL_STREAM_BUFFER(obj) (CAMEL_CHECK_CAST((obj), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBuffer))
#define CAMEL_STREAM_BUFFER_CLASS(k) (CAMEL_CHECK_CLASS_CAST ((k), CAMEL_STREAM_BUFFER_TYPE, CamelStreamBufferClass))
#define CAMEL_IS_STREAM_BUFFER(o) (CAMEL_CHECK_TYPE((o), CAMEL_STREAM_BUFFER_TYPE))
typedef enum {
CAMEL_STREAM_BUFFER_BUFFER = 0,
CAMEL_STREAM_BUFFER_NONE,
CAMEL_STREAM_BUFFER_READ = 0x00,
CAMEL_STREAM_BUFFER_WRITE = 0x80,
CAMEL_STREAM_BUFFER_MODE = 0x80
} CamelStreamBufferMode;
struct _CamelStreamBuffer
{
CamelStream parent_object;
/* these are all of course, private */
CamelStream *stream;
unsigned char *buf, *ptr, *end;
int size;
unsigned char *linebuf; /* for reading lines at a time */
int linesize;
CamelStreamBufferMode mode;
unsigned int flags; /* internal flags */
};
typedef struct {
CamelStreamClass parent_class;
/* Virtual methods */
void (*init) (CamelStreamBuffer *stream_buffer, CamelStream *stream,
CamelStreamBufferMode mode);
void (*init_vbuf) (CamelStreamBuffer *stream_buffer,
CamelStream *stream, CamelStreamBufferMode mode,
char *buf, guint32 size);
} CamelStreamBufferClass;
/* Standard Camel function */
CamelType camel_stream_buffer_get_type (void);
/* public methods */
CamelStream *camel_stream_buffer_new (CamelStream *s,
CamelStreamBufferMode mode);
CamelStream *camel_stream_buffer_new_with_vbuf (CamelStream *s,
CamelStreamBufferMode mode,
char *buf, guint32 size);
/* unimplemented
CamelStream *camel_stream_buffer_set_vbuf (CamelStreamBuffer *b, CamelStreamBufferMode mode, char *buf, guint32 size); */
/* read a line of characters */
int camel_stream_buffer_gets (CamelStreamBuffer *b, char *buf, unsigned int max);
char *camel_stream_buffer_read_line (CamelStreamBuffer *sbf);
#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* CAMEL_STREAM_BUFFER_H */