]> cygwin.com Git - cygwin-apps/setup.git/blame - io_stream_memory.h
Add command-line option help-text localization
[cygwin-apps/setup.git] / io_stream_memory.h
CommitLineData
ca9506cc
RC
1/*
2 * Copyright (c) 2001, Robert Collins.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * A copy of the GNU General Public License can be found at
10 * http://www.gnu.org/
11 *
12 * Written by Robert Collins <rbtcollins@hotmail.com>
13 *
14 */
15
c93bc6d0
MB
16#ifndef SETUP_IO_STREAM_MEMORY_H
17#define SETUP_IO_STREAM_MEMORY_H
ca9506cc 18
341988b9
RC
19/* needed to parse */
20#include <errno.h>
21
ca9506cc
RC
22/* this is a stream class that simply abstracts the issue of maintaining
23 * amemory buffer.
24 * It's not as efficient as if can be, but that can be fixed without affecting
25 * the API.
26 */
27
28class memblock
29{
30public:
31 memblock () : next (0), len (0), data (0) {};
5e0464a1 32 memblock (size_t size) : next (0), len (size) {data = new unsigned char[size]; if (!data) len = 0;};
ca9506cc
RC
33 ~memblock ();
34 memblock *next;
35 size_t len;
36 unsigned char *data;
37};
38
39class io_stream_memory :public io_stream
40{
41public:
42 io_stream_memory () : lasterr (0), mtime(0),length (0), head(), tail (&head), pos_block (head.next), pos_block_offset (0), pos (0) {};
43 /* set the modification time of a file - returns 1 on failure
44 * may distrupt internal state - use after all important io is complete
45 */
26922cd2
CV
46 virtual int set_mtime (time_t newmtime)
47 {mtime = newmtime; return 0;};
ca9506cc 48 /* get the mtime for a file TODO make this a stat(0 style call */
b41c2908 49 virtual time_t get_mtime () {return mtime;};
26922cd2 50 virtual mode_t get_mode () {return 0;};
341988b9
RC
51 /* returns the _current_ size. */
52 virtual size_t get_size () {return length;};
ca9506cc 53 /* read data (duh!) */
ca9506cc
RC
54 virtual ssize_t read (void *buffer, size_t len);
55 /* provide data to (double duh!) */
56 virtual ssize_t write (const void *buffer, size_t len);
57 /* read data without removing it from the class's internal buffer */
58 virtual ssize_t peek (void *buffer, size_t len);
59 /* ever read the f* functions from libc ? */
60 virtual long tell () {return pos;};
61 virtual int seek (long where, io_stream_seek_t whence) { if (whence != IO_SEEK_SET) { lasterr = EINVAL; return -1;} ssize_t count=0; pos = 0; pos_block = head.next; pos_block_offset = 0; while (count < where && pos < length) {pos_block_offset++; if (pos_block_offset == pos_block->len) {pos_block = pos_block->next; pos_block_offset = 0;}pos++;count++;}return 0;};
62
63 /* try guessing this one */
64 virtual int error ();
65// virtual const char* next_file_name() = NULL;
66 /* if you are still needing these hints... give up now! */
67 virtual ~ io_stream_memory ();
68private:
69 int lasterr;
b41c2908 70 time_t mtime;
ca9506cc
RC
71 size_t length;
72 memblock head;
73 memblock *tail;
74 memblock *pos_block;
75 size_t pos_block_offset;
76 size_t pos;
77};
78
c93bc6d0 79#endif /* SETUP_IO_STREAM_MEMORY_H */
This page took 0.124867 seconds and 5 git commands to generate.