/** * g_mime_stream_mmap_new_with_bounds: * @fd: file descriptor * @prot: protection flags * @flags: map flags * @start: start boundary * @end: end boundary * * Creates a new #GMimeStreamMmap object around @fd with bounds @start * and @end. * * Returns: a stream using @fd with bounds @start and @end. **/ GMimeStream * g_mime_stream_mmap_new_with_bounds (int fd, int prot, int flags, gint64 start, gint64 end) { #ifdef HAVE_MMAP GMimeStreamMmap *mstream; struct stat st; size_t len; char *map; if (end == -1) { if (fstat (fd, &st) == -1) return NULL; len = st.st_size; } else len = (size_t) end; if ((map = mmap (NULL, len, prot, flags, fd, 0)) == MAP_FAILED) return NULL; mstream = g_object_newv (GMIME_TYPE_STREAM_MMAP, 0, NULL); g_mime_stream_construct ((GMimeStream *) mstream, start, end); mstream->owner = TRUE; mstream->eos = FALSE; mstream->fd = fd; mstream->map = map; mstream->maplen = len; return (GMimeStream *) mstream; #else return NULL; #endif /* HAVE_MMAP */ }
/** * g_mime_stream_mmap_new: * @fd: file descriptor * @prot: protection flags * @flags: map flags * * Creates a new #GMimeStreamMmap object around @fd. * * Returns: a stream using @fd. **/ GMimeStream * g_mime_stream_mmap_new (int fd, int prot, int flags) { #ifdef HAVE_MMAP GMimeStreamMmap *mstream; struct stat st; gint64 start; char *map; if ((start = lseek (fd, 0, SEEK_CUR)) == -1) return NULL; if (fstat (fd, &st) == -1) return NULL; map = mmap (NULL, st.st_size, prot, flags, fd, 0); if (map == MAP_FAILED) return NULL; mstream = g_object_newv (GMIME_TYPE_STREAM_MMAP, 0, NULL); g_mime_stream_construct ((GMimeStream *) mstream, start, -1); mstream->owner = TRUE; mstream->eos = FALSE; mstream->fd = fd; mstream->map = map; mstream->maplen = st.st_size; return (GMimeStream *) mstream; #else return NULL; #endif /* HAVE_MMAP */ }
static GMimeStream * stream_substream (GMimeStream *stream, gint64 start, gint64 end) { GMimeStream *null; null = g_object_newv (GMIME_TYPE_STREAM_NULL, 0, NULL); g_mime_stream_construct (null, start, end); return null; }
/** * g_mime_stream_null_new: * * Creates a new #GMimeStreamNull object. * * Returns: a new null stream (similar to /dev/null on Unix). **/ GMimeStream * g_mime_stream_null_new (void) { GMimeStream *null; null = g_object_newv (GMIME_TYPE_STREAM_NULL, 0, NULL); g_mime_stream_construct (null, 0, -1); return null; }
static GMimeStream * stream_substream (GMimeStream *stream, gint64 start, gint64 end) { GMimeStreamFile *fstream; fstream = g_object_newv (GMIME_TYPE_STREAM_FILE, 0, NULL); g_mime_stream_construct (GMIME_STREAM (fstream), start, end); fstream->owner = FALSE; fstream->fp = GMIME_STREAM_FILE (stream)->fp; return GMIME_STREAM (fstream); }
static GMimeStream * stream_substream (GMimeStream *stream, gint64 start, gint64 end) { /* FIXME: maybe we should return a GMimeStreamFs? */ GMimeStreamMmap *mstream; mstream = g_object_newv (GMIME_TYPE_STREAM_MMAP, 0, NULL); g_mime_stream_construct (GMIME_STREAM (mstream), start, end); mstream->fd = GMIME_STREAM_MMAP (stream)->fd; mstream->owner = FALSE; mstream->maplen = GMIME_STREAM_MMAP (stream)->maplen; mstream->map = GMIME_STREAM_MMAP (stream)->map; return (GMimeStream *) mstream; }
/** * g_mime_stream_file_new_with_bounds: * @fp: a FILE pointer * @start: start boundary * @end: end boundary * * Creates a new #GMimeStreamFile object around @fp with bounds @start * and @end. * * Note: The created #GMimeStreamFile object will own the FILE pointer * passed in. * * Returns: a stream using @fp with bounds @start and @end. **/ GMimeStream * g_mime_stream_file_new_with_bounds (FILE *fp, gint64 start, gint64 end) { GMimeStreamFile *fstream; g_return_val_if_fail (fp != NULL, NULL); #ifdef G_OS_WIN32 _setmode (_fileno (fp), O_BINARY); #endif fstream = g_object_newv (GMIME_TYPE_STREAM_FILE, 0, NULL); g_mime_stream_construct (GMIME_STREAM (fstream), start, end); fstream->owner = TRUE; fstream->fp = fp; return GMIME_STREAM (fstream); }
static GMimeStream * lbmss_stream_substream(GMimeStream * stream, gint64 start, gint64 end) { LibBalsaMimeStreamShared *stream_shared; GMimeStreamFs *fstream; stream_shared = g_object_new(LIBBALSA_TYPE_MIME_STREAM_SHARED, NULL, NULL); stream_shared->lock = lbmss_lock_ref(LIBBALSA_MIME_STREAM_SHARED(stream)->lock); fstream = GMIME_STREAM_FS(stream_shared); fstream->owner = FALSE; fstream->fd = GMIME_STREAM_FS(stream)->fd; g_mime_stream_construct(GMIME_STREAM(fstream), start, end); return GMIME_STREAM(fstream); }
/** * libbalsa_mime_stream_shared_new: * @fd: file descriptor * * Create a new GMimeStreamShared object around @fd. * * Returns a stream using @fd. * **/ GMimeStream * libbalsa_mime_stream_shared_new(int fd) { LibBalsaMimeStreamShared *stream_shared; GMimeStreamFs *fstream; gint64 start; stream_shared = g_object_new(LIBBALSA_TYPE_MIME_STREAM_SHARED, NULL, NULL); stream_shared->lock = lbmss_lock_new(); fstream = GMIME_STREAM_FS(stream_shared); fstream->owner = TRUE; fstream->eos = FALSE; fstream->fd = fd; start = lseek(fd, 0, SEEK_CUR); g_mime_stream_construct(GMIME_STREAM(fstream), start, -1); return GMIME_STREAM(fstream); }
/** * g_mime_stream_file_new: * @fp: a FILE pointer * * Creates a new #GMimeStreamFile object around @fp. * * Note: The created #GMimeStreamFile object will own the FILE pointer * passed in. * * Returns: a stream using @fp. **/ GMimeStream * g_mime_stream_file_new (FILE *fp) { GMimeStreamFile *fstream; gint64 start; g_return_val_if_fail (fp != NULL, NULL); #ifdef G_OS_WIN32 _setmode (_fileno (fp), O_BINARY); #endif if ((start = ftell (fp)) == -1) start = 0; fstream = g_object_newv (GMIME_TYPE_STREAM_FILE, 0, NULL); g_mime_stream_construct (GMIME_STREAM (fstream), start, -1); fstream->owner = TRUE; fstream->fp = fp; return GMIME_STREAM (fstream); }