Changes in uspace/lib/posix/source/unistd.c [59f388a:6afc9d7] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/posix/source/unistd.c
r59f388a r6afc9d7 47 47 #include "libc/stats.h" 48 48 #include "libc/malloc.h" 49 #include "libc/vfs/vfs.h"50 51 aoff64_t posix_pos[MAX_OPEN_FILES];52 49 53 50 /* Array of environment variable strings (NAME=VALUE). */ … … 108 105 char *posix_getcwd(char *buf, size_t size) 109 106 { 110 int rc = rcerrno(vfs_cwd_get, buf, size); 111 if (rc != EOK) 107 char *p = getcwd(buf, size); 108 109 if (p == NULL) { 110 errno = -errno; 112 111 return NULL; 113 return buf; 112 } 113 114 return p; 114 115 } 115 116 … … 121 122 int posix_chdir(const char *path) 122 123 { 123 int rc = rcerrno(vfs_cwd_set, path); 124 if (rc != EOK) 125 return -1; 126 return 0; 124 return negerrno(chdir, path); 127 125 } 128 126 … … 177 175 int posix_close(int fildes) 178 176 { 179 posix_pos[fildes] = 0; 180 int rc = rcerrno(vfs_put, fildes); 181 if (rc != EOK) 182 return -1; 183 else 184 return 0; 177 return negerrno(close, fildes); 185 178 } 186 179 … … 195 188 ssize_t posix_read(int fildes, void *buf, size_t nbyte) 196 189 { 197 ssize_t size = rcerrno(vfs_read, fildes, &posix_pos[fildes], buf, nbyte); 198 if (size < 0) 199 return -1; 200 return size; 190 return negerrno(read, fildes, buf, nbyte); 201 191 } 202 192 … … 211 201 ssize_t posix_write(int fildes, const void *buf, size_t nbyte) 212 202 { 213 ssize_t size = rcerrno(vfs_write, fildes, &posix_pos[fildes], buf, nbyte); 214 if (size < 0) 215 return -1; 216 return size; 203 return negerrno(write, fildes, buf, nbyte); 217 204 } 218 205 … … 228 215 posix_off_t posix_lseek(int fildes, posix_off_t offset, int whence) 229 216 { 230 struct stat st; 231 int rc; 232 233 switch (whence) { 234 case SEEK_SET: 235 posix_pos[fildes] = offset; 236 break; 237 case SEEK_CUR: 238 posix_pos[fildes] += offset; 239 break; 240 case SEEK_END: 241 rc = rcerrno(vfs_stat, fildes, &st); 242 if (rc != EOK) 243 return -1; 244 posix_pos[fildes] = st.size + offset; 245 break; 246 } 247 if (posix_pos[fildes] > INT64_MAX) { 248 /* The native width is too large for the POSIX interface. */ 249 errno = ERANGE; 250 return -1; 251 } 252 return posix_pos[fildes]; 217 return negerrno(lseek, fildes, offset, whence); 253 218 } 254 219 … … 261 226 int posix_fsync(int fildes) 262 227 { 263 if (rcerrno(vfs_sync, fildes) != EOK) 264 return -1; 265 else 266 return 0; 228 return negerrno(fsync, fildes); 267 229 } 268 230 … … 276 238 int posix_ftruncate(int fildes, posix_off_t length) 277 239 { 278 if (rcerrno(vfs_resize, fildes, (aoff64_t) length) != EOK) 279 return -1; 280 else 281 return 0; 240 return negerrno(ftruncate, fildes, (aoff64_t) length); 282 241 } 283 242 … … 290 249 int posix_rmdir(const char *path) 291 250 { 292 if (rcerrno(vfs_unlink_path, path) != EOK) 293 return -1; 294 else 295 return 0; 251 return negerrno(rmdir, path); 296 252 } 297 253 … … 304 260 int posix_unlink(const char *path) 305 261 { 306 if (rcerrno(vfs_unlink_path, path) != EOK) 307 return -1; 308 else 309 return 0; 262 return negerrno(unlink, path); 310 263 } 311 264 … … 331 284 int posix_dup2(int fildes, int fildes2) 332 285 { 333 return negerrno( vfs_clone, fildes, fildes2, false);286 return negerrno(dup2, fildes, fildes2); 334 287 } 335 288 … … 349 302 * Check file existence by attempting to open it. 350 303 */ 351 int fd = posix_open(path, O_RDONLY); 352 if (fd < 0) 304 int fd = negerrno(open, path, O_RDONLY); 305 if (fd < 0) { 306 /* errno was set by open() */ 353 307 return -1; 354 posix_close(fd); 308 } 309 close(fd); 355 310 return 0; 356 311 } else {
Note:
See TracChangeset
for help on using the changeset viewer.