Changes in uspace/lib/posix/source/unistd.c [5759642f:6afc9d7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/source/unistd.c
r5759642f r6afc9d7 105 105 char *posix_getcwd(char *buf, size_t size) 106 106 { 107 /* Native getcwd() does not set any errno despite the fact that general 108 * usage pattern of this function depends on it (caller is repeatedly 109 * guessing the required size of the buffer by checking for ERANGE on 110 * failure). */ 111 if (size == 0) { 112 errno = EINVAL; 107 char *p = getcwd(buf, size); 108 109 if (p == NULL) { 110 errno = -errno; 113 111 return NULL; 114 112 } 115 116 /* Save the original value to comply with the "no modification on 117 * success" semantics. 118 */ 119 int orig_errno = errno; 120 errno = EOK; 121 122 char *ret = getcwd(buf, size); 123 if (ret == NULL) { 124 /* Check errno to avoid shadowing other possible errors. */ 125 if (errno == EOK) { 126 errno = ERANGE; 127 } 128 } else { 129 /* Success, restore previous errno value. */ 130 errno = orig_errno; 131 } 132 133 return ret; 113 114 return p; 134 115 } 135 116 … … 141 122 int posix_chdir(const char *path) 142 123 { 143 return errnify(chdir, path);124 return negerrno(chdir, path); 144 125 } 145 126 … … 194 175 int posix_close(int fildes) 195 176 { 196 return errnify(close, fildes);177 return negerrno(close, fildes); 197 178 } 198 179 … … 207 188 ssize_t posix_read(int fildes, void *buf, size_t nbyte) 208 189 { 209 return errnify(read, fildes, buf, nbyte);190 return negerrno(read, fildes, buf, nbyte); 210 191 } 211 192 … … 220 201 ssize_t posix_write(int fildes, const void *buf, size_t nbyte) 221 202 { 222 return errnify(write, fildes, buf, nbyte); 203 return negerrno(write, fildes, buf, nbyte); 204 } 205 206 /** 207 * Reposition read/write file offset 208 * 209 * @param fildes File descriptor of the opened file. 210 * @param offset New offset in the file. 211 * @param whence The position from which the offset argument is specified. 212 * @return Upon successful completion, returns the resulting offset 213 * as measured in bytes from the beginning of the file, -1 otherwise. 214 */ 215 posix_off_t posix_lseek(int fildes, posix_off_t offset, int whence) 216 { 217 return negerrno(lseek, fildes, offset, whence); 223 218 } 224 219 … … 231 226 int posix_fsync(int fildes) 232 227 { 233 return errnify(fsync, fildes);228 return negerrno(fsync, fildes); 234 229 } 235 230 … … 243 238 int posix_ftruncate(int fildes, posix_off_t length) 244 239 { 245 return errnify(ftruncate, fildes, (aoff64_t) length);240 return negerrno(ftruncate, fildes, (aoff64_t) length); 246 241 } 247 242 … … 254 249 int posix_rmdir(const char *path) 255 250 { 256 return errnify(rmdir, path);251 return negerrno(rmdir, path); 257 252 } 258 253 … … 265 260 int posix_unlink(const char *path) 266 261 { 267 return errnify(unlink, path);262 return negerrno(unlink, path); 268 263 } 269 264 … … 289 284 int posix_dup2(int fildes, int fildes2) 290 285 { 291 return errnify(dup2, fildes, fildes2);286 return negerrno(dup2, fildes, fildes2); 292 287 } 293 288 … … 307 302 * Check file existence by attempting to open it. 308 303 */ 309 int fd = open(path, O_RDONLY);304 int fd = negerrno(open, path, O_RDONLY); 310 305 if (fd < 0) { 311 errno = -fd;306 /* errno was set by open() */ 312 307 return -1; 313 308 } … … 375 370 // TODO: low priority, just a compile-time dependency of binutils 376 371 not_implemented(); 372 return -1; 377 373 } 378 374 … … 385 381 // TODO: low priority, just a compile-time dependency of binutils 386 382 not_implemented(); 383 return -1; 387 384 } 388 385 … … 397 394 // TODO: low priority, just a compile-time dependency of binutils 398 395 not_implemented(); 396 return -1; 399 397 } 400 398 … … 409 407 // TODO: low priority, just a compile-time dependency of binutils 410 408 not_implemented(); 409 return -1; 411 410 } 412 411 … … 420 419 // TODO: low priority, just a compile-time dependency of binutils 421 420 not_implemented(); 421 return -1; 422 422 } 423 423
Note:
See TracChangeset
for help on using the changeset viewer.