145 |
145 |
146 size_t opos = npos; |
146 size_t opos = npos; |
147 npos += offset; |
147 npos += offset; |
148 |
148 |
149 if ((offset > 0 && npos < opos) || (offset < 0 && npos > opos)) { |
149 if ((offset > 0 && npos < opos) || (offset < 0 && npos > opos)) { |
150 errno = EOVERFLOW; |
150 // to be compliant with fseek() specification |
|
151 // we return EINVAL on underflow |
|
152 errno = EINVAL; |
151 return -1; |
153 return -1; |
152 } |
154 } |
153 |
155 |
154 if (npos > buffer->size) { |
156 if (npos > buffer->size) { |
|
157 // not compliant with fseek() specification |
|
158 // but this is the better behavior for CxBuffer |
|
159 errno = EINVAL; |
155 return -1; |
160 return -1; |
156 } else { |
161 } else { |
157 buffer->pos = npos; |
162 buffer->pos = npos; |
158 return 0; |
163 return 0; |
159 } |
164 } |