aboutsummaryrefslogtreecommitdiff
path: root/stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'stream.h')
-rw-r--r--stream.h66
1 files changed, 42 insertions, 24 deletions
diff --git a/stream.h b/stream.h
index f027ece..66dd0ed 100644
--- a/stream.h
+++ b/stream.h
@@ -22,39 +22,47 @@ typedef struct Stream_t {
struct Class_t *Class;
int refs;
struct Stream_t *Next;
- struct Stream_t *Buffer;
} Stream_t;
#include "mtools.h"
#include "msdos.h"
-
+#include "device.h"
#include "llong.h"
+void limitSizeToOffT(size_t *len, mt_off_t maxLen);
+
doscp_t *get_dosConvert_pass_through(Stream_t *Stream);
typedef struct Class_t {
- int (*read)(Stream_t *, char *, mt_off_t, size_t);
- int (*write)(Stream_t *, char *, mt_off_t, size_t);
+ ssize_t (*read)(Stream_t *, char *, size_t);
+ ssize_t (*write)(Stream_t *, char *, size_t);
+ ssize_t (*pread)(Stream_t *, char *, mt_off_t, size_t);
+ ssize_t (*pwrite)(Stream_t *, char *, mt_off_t, size_t);
int (*flush)(Stream_t *);
int (*freeFunc)(Stream_t *);
- int (*set_geom)(Stream_t *, device_t *, device_t *, int media,
- union bootsector *);
- int (*get_data)(Stream_t *, time_t *, mt_size_t *, int *, int *);
- int (*pre_allocate)(Stream_t *, mt_size_t);
+ int (*set_geom)(Stream_t *, device_t *, device_t *);
+ int (*get_data)(Stream_t *, time_t *, mt_off_t *, int *, uint32_t *);
+ int (*pre_allocate)(Stream_t *, mt_off_t);
doscp_t *(*get_dosConvert)(Stream_t *);
int (*discard)(Stream_t *);
} Class_t;
-#define READS(stream, buf, address, size) \
-((stream)->Class->read)( (stream), (char *) (buf), (address), (size) )
+#define READS(stream, buf, size) \
+((stream)->Class->read)( (stream), (char *) (buf), (size) )
+
+#define WRITES(stream, buf, size) \
+((stream)->Class->write)( (stream), (char *) (buf), (size) )
+
+#define PREADS(stream, buf, address, size) \
+((stream)->Class->pread)( (stream), (char *) (buf), (address), (size) )
-#define WRITES(stream, buf, address, size) \
-((stream)->Class->write)( (stream), (char *) (buf), (address), (size) )
+#define PWRITES(stream, buf, address, size) \
+((stream)->Class->pwrite)( (stream), (char *) (buf), (address), (size) )
-#define SET_GEOM(stream, dev, orig_dev, media, boot) \
-(stream)->Class->set_geom( (stream), (dev), (orig_dev), (media), (boot) )
+#define SET_GEOM(stream, dev, orig_dev) \
+(stream)->Class->set_geom( (stream), (dev), (orig_dev))
#define GET_DATA(stream, date, size, type, address) \
(stream)->Class->get_data( (stream), (date), (size), (type), (address) )
@@ -84,24 +92,34 @@ copy_stream( (stream) )
#define DeclareThis(x) x *This = (x *) Stream
-int force_write(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
-int force_read(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
+void init_head(Stream_t *Stream, struct Class_t *Class, Stream_t *Next);
-int get_data_pass_through(Stream_t *Stream, time_t *date, mt_size_t *size,
- int *type, int *address);
+ssize_t force_pwrite(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
+ssize_t force_pread(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
-int read_pass_through(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
-int write_pass_through(Stream_t *Stream, char *buf, mt_off_t start, size_t len);
+ssize_t force_write(Stream_t *Stream, char *buf, size_t len);
-mt_off_t sectorsToBytes(Stream_t *This, off_t off);
+int set_geom_pass_through(Stream_t *Stream, device_t *dev, device_t *orig_dev);
-mt_size_t getfree(Stream_t *Stream);
-int getfreeMinBytes(Stream_t *Stream, mt_size_t ref);
+int set_geom_noop(Stream_t *Stream, device_t *dev, device_t *orig_dev);
+
+int get_data_pass_through(Stream_t *Stream, time_t *date, mt_off_t *size,
+ int *type, uint32_t *address);
+
+ssize_t pread_pass_through(Stream_t *Stream, char *buf,
+ mt_off_t start, size_t len);
+ssize_t pwrite_pass_through(Stream_t *Stream, char *buf,
+ mt_off_t start, size_t len);
+
+mt_off_t getfree(Stream_t *Stream);
+int getfreeMinBytes(Stream_t *Stream, mt_off_t ref);
Stream_t *find_device(char drive, int mode, struct device *out_dev,
union bootsector *boot,
- char *name, int *media, mt_size_t *maxSize,
+ char *name, int *media, mt_off_t *maxSize,
int *isRop);
+int adjust_tot_sectors(struct device *dev, mt_off_t offset, char *errmsg);
+
#endif