1 //========================================================================
5 // Copyright 1996-2002 Glyph & Cog, LLC
6 // Copyright 2003 Martin Kretzschmar
8 //========================================================================
11 #pragma implementation
17 #include "GnomeVFSStream.h"
18 #include "gpdf-g-switch.h"
19 # include <libgnomevfs/gnome-vfs.h>
20 #include "gpdf-g-switch.h"
26 GnomeVFSStream::GnomeVFSStream(GnomeVFSHandle *handleA, Guint startA,
27 GBool limitedA, Guint lengthA, Object *dictA):
33 bufPtr = bufEnd = buf;
39 GnomeVFSStream::~GnomeVFSStream() {
43 Stream *GnomeVFSStream::makeSubStream(Guint startA, GBool limitedA,
44 Guint lengthA, Object *dictA) {
45 return new GnomeVFSStream(handle, startA, limitedA, lengthA, dictA);
48 void GnomeVFSStream::reset() {
49 GnomeVFSFileSize offsetReturn;
50 gnome_vfs_tell(handle, &offsetReturn);
51 savePos = (Guint)offsetReturn;
53 gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, start);
54 bufPtr = bufEnd = buf;
62 void GnomeVFSStream::close() {
64 gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, savePos);
69 GBool GnomeVFSStream::fillBuf() {
71 GnomeVFSFileSize bytesRead;
76 bufPos += bufEnd - buf;
77 bufPtr = bufEnd = buf;
78 if (limited && bufPos >= start + length) {
81 if (limited && bufPos + gnomeVFSStreamBufSize > start + length) {
82 n = start + length - bufPos;
84 n = gnomeVFSStreamBufSize;
86 gnome_vfs_read(handle, buf, n, &bytesRead);
87 bufEnd = buf + bytesRead;
88 if (bufPtr >= bufEnd) {
93 for (p = buf; p < bufEnd; ++p) {
94 *p = (char)decrypt->decryptByte((Guchar)*p);
101 void GnomeVFSStream::setPos(Guint pos, int dir) {
105 gnome_vfs_seek(handle, GNOME_VFS_SEEK_START, pos);
108 GnomeVFSFileSize offsetReturn;
109 gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, 0);
110 gnome_vfs_tell(handle, &offsetReturn);
111 size = (Guint)offsetReturn;
114 gnome_vfs_seek(handle, GNOME_VFS_SEEK_END, -(int)pos);
115 gnome_vfs_tell(handle, &offsetReturn);
116 bufPos = (Guint)offsetReturn;
118 bufPtr = bufEnd = buf;
121 void GnomeVFSStream::moveStart(int delta) {
123 bufPtr = bufEnd = buf;