ObjFW  Diff

Differences From Artifact [1697ea3e2b]:

To Artifact [d9d07c7da0]:


42
43
44
45
46
47
48
49

50
51
52
53
54
55
56
42
43
44
45
46
47
48

49
50
51
52
53
54
55
56







-
+







- (instancetype)initWithMemoryAddress: (void *)address
				 size: (size_t)size
			     writable: (bool)writable
{
	self = [super init];

	@try {
		if (size > SSIZE_MAX || (ssize_t)size != (OFFileOffset)size)
		if (size > SSIZE_MAX || (ssize_t)size != (OFStreamOffset)size)
			@throw [OFOutOfRangeException exception];

		_address = address;
		_size = size;
		_writable = writable;
	} @catch (id e) {
		[self release];
97
98
99
100
101
102
103
104


105
106

107
108
109

110
111
112
113


114
115
116


117
118
119
120
121
122

123
124
125
126
127
128
129
130
97
98
99
100
101
102
103

104
105
106

107
108
109

110
111
112


113
114
115


116
117
118
119
120
121
122

123
124
125
126
127
128
129
130
131







-
+
+

-
+


-
+


-
-
+
+

-
-
+
+





-
+








}

- (bool)lowlevelIsAtEndOfStream
{
	return (_position == _size);
}

- (OFFileOffset)lowlevelSeekToOffset: (OFFileOffset)offset whence: (int)whence
- (OFStreamOffset)lowlevelSeekToOffset: (OFStreamOffset)offset
				whence: (OFSeekWhence)whence
{
	OFFileOffset new;
	OFStreamOffset new;

	switch (whence) {
	case SEEK_SET:
	case OFSeekSet:
		new = offset;
		break;
	case SEEK_CUR:
		new = (OFFileOffset)_position + offset;
	case OFSeekCurrent:
		new = (OFStreamOffset)_position + offset;
		break;
	case SEEK_END:
		new = (OFFileOffset)_size + offset;
	case OFSeekEnd:
		new = (OFStreamOffset)_size + offset;
		break;
	default:
		@throw [OFInvalidArgumentException exception];
	}

	if (new < 0 || new > (OFFileOffset)_size)
	if (new < 0 || new > (OFStreamOffset)_size)
		@throw [OFSeekFailedException exceptionWithStream: self
							   offset: offset
							   whence: whence
							    errNo: EINVAL];

	return (_position = (size_t)new);
}
@end