File: io.h

package info (click to toggle)
bar 1.11.1-3
  • links: PTS, VCS
  • area: main
  • in suites: bullseye, buster, sid
  • size: 928 kB
  • sloc: ansic: 4,381; sh: 3,334; makefile: 264
file content (77 lines) | stat: -rw-r--r-- 2,205 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
/*
 * I/O and buffering
 */

#ifndef __io_h__
#define __io_h__

#include "headers.h"
#include "types.h"

/** I/O */
struct _io {
	/** Input path, if given on the command line.  This is used when copying a
	 * file into a directory, the base filename of the input file is used as the
	 * filename in the destination directory, so we need to keep it around. */
	char *in_path;
	/** Input file descriptor. */
	int in;
	/** Output file descriptor. */
	int out;
	/** Flag: Input source is ready to be read. */
	int in_ready;
	/** Flag: Output source is ready to be written to. */
	int out_ready;
	/** Flag: End of input has been reached. */
	int eof_in;
	/** Flag: End of output has been reached. */
	int eof_out;
	/** The size of the I/O buffer. */
	size_t buffer_size;
	/** A pointer to the I/O buffer. */
	char *buffer;
	/** The location of the start of the ring buffer. */
	size_t buffer_head;
	/** The length of the ring buffer. */
	size_t buffer_used;
	/** The number of bytes read the last time I/O was performed. */
	ssize_t last_read;
	/** The number of bytes written the last time I/O was performed. */
	ssize_t last_write;
	/** The total number of bytes read. */
	uint64 total_read;
	/** The total number of bytes written. */
	uint64 total_write;
	/** The total size of the input stream, if known. */
	uint64 total_size;
	/** If continuing from a previously interrupted stream, assume that this
	 * many bytes have already been read and written. */
	uint64 continue_size;
	/** Flag: Whether or not the total size of the input stream is known. */
	int total_size_known;
	/** The number of microseconds to wait for a change in I/O state. */
	uint32 timeout;
	/** The current time, used for throttling input. */
	time_t current_time;
	/** The maximum number of bytes per second that we're allowed to read. */
	uint64 throttle;
	/** The number if bytes read so far for this second. */
	uint64 throttle_count;
	/** The size of a block in bytes, used for calculating total_size and
	 * buffer_size. */
	uint64 block_size;
	};

typedef struct _io IO;

extern IO io;

int ioInit(void);
int ioBegin(void);
int ioEnd(void);
void ioCheck(void);
int ioRead(void);
int ioWrite(void);
int ioIsDone(void);

#endif