Changeset 0b97336 in mainline for uspace/lib/c/generic/vfs/vfs.c


Ignore:
Timestamp:
2017-03-18T15:13:28Z (7 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
38aaf005
Parents:
c725619
Message:

Set errno and return -1 for standards-alluding interfaces

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/vfs/vfs.c

    rc725619 r0b97336  
    395395        assert((((oflag & O_RDONLY) != 0) + ((oflag & O_WRONLY) != 0) + ((oflag & O_RDWR) != 0)) == 1);
    396396       
    397         int ret = vfs_lookup(path, walk_flags(oflag) | WALK_REGULAR);
    398         if (ret < 0) {
    399                 return ret;
     397        int fd = vfs_lookup(path, walk_flags(oflag) | WALK_REGULAR);
     398        if (fd < 0) {
     399                errno = fd;
     400                return -1;
    400401        }
    401402       
     
    406407                ((oflag & O_APPEND) ? MODE_APPEND : 0);
    407408       
    408         int rc = _vfs_open(ret, mode);
     409        int rc = _vfs_open(fd, mode);
    409410        if (rc < 0) {
    410                 // _vfs_put(ret);
    411                 close(ret);
    412                 return rc;
     411                close(fd);
     412                errno = rc;
     413                return -1;
    413414        }
    414415       
     
    417418                assert(!(oflag & O_APPEND));
    418419               
    419                 // _vfs_resize
    420                 (void) ftruncate(ret, 0);
    421         }
    422 
    423         return ret;
     420                (void) ftruncate(fd, 0);
     421        }
     422
     423        return fd;
    424424}
    425425
     
    723723        int fd = vfs_lookup(path, 0);
    724724        if (fd < 0) {
    725                 return fd;
     725                errno = fd;
     726                return -1;
    726727        }
    727728       
    728729        int rc = fstat(fd, stat);
    729         close(fd);
     730        if (rc != EOK) {
     731                close(fd);
     732                errno = rc;
     733                rc = -1;
     734        } else
     735                rc = close(fd);
     736
    730737        return rc;
    731738}
     
    745752        }
    746753       
    747         int ret = vfs_lookup(dirname, WALK_DIRECTORY);
    748         if (ret < 0) {
     754        int fd = vfs_lookup(dirname, WALK_DIRECTORY);
     755        if (fd < 0) {
    749756                free(dirp);
    750                 errno = ret;
     757                errno = fd;
    751758                return NULL;
    752759        }
    753760       
    754         int rc = _vfs_open(ret, MODE_READ);
     761        int rc = _vfs_open(fd, MODE_READ);
    755762        if (rc < 0) {
    756763                free(dirp);
    757                 close(ret);
     764                close(fd);
    758765                errno = rc;
    759766                return NULL;
    760767        }
    761768       
    762         dirp->fd = ret;
     769        dirp->fd = fd;
    763770        return dirp;
    764771}
     
    818825int mkdir(const char *path, mode_t mode)
    819826{
    820         int ret = vfs_lookup(path, WALK_MUST_CREATE | WALK_DIRECTORY);
    821         if (ret < 0) {
    822                 return ret;
    823         }
    824        
    825         close(ret);
    826         return EOK;
     827        int fd = vfs_lookup(path, WALK_MUST_CREATE | WALK_DIRECTORY);
     828        if (fd < 0) {
     829                errno = fd;
     830                return -1;
     831        }
     832       
     833        return close(fd);
    827834}
    828835
     
    858865        char *pa = vfs_absolutize(path, &pa_size);
    859866        if (!pa) {
    860                 return ENOMEM;
     867                errno = ENOMEM;
     868                return -1;
    861869        }
    862870       
     
    864872        if (root < 0) {
    865873                free(pa);
    866                 return ENOENT;
     874                errno = ENOENT;
     875                return -1;
    867876        }
    868877       
    869878        int rc = _vfs_unlink2(root, pa, -1, 0);
    870879       
     880        if (rc != EOK) {
     881                errno = rc;
     882                rc = -1;
     883        }
     884
    871885        free(pa);
    872886        close(root);
     
    884898        char *pa = vfs_absolutize(path, &pa_size);
    885899        if (!pa) {
    886                 return ENOMEM;
     900                errno = ENOMEM;
     901                return -1;
    887902        }
    888903       
     
    890905        if (root < 0) {
    891906                free(pa);
    892                 return ENOENT;
     907                errno = ENOENT;
     908                return -1;
    893909        }
    894910       
    895911        int rc = _vfs_unlink2(root, pa, -1, WALK_DIRECTORY);
     912
     913        if (rc != EOK) {
     914                errno = rc;
     915                rc = -1;
     916        }
    896917       
    897918        free(pa);
     
    933954                free(olda);
    934955                free(newa);
    935                 return ENOENT;
     956                errno = ENOENT;
     957                return -1;
    936958        }
    937959       
     
    10001022        size_t abs_size;
    10011023        char *abs = vfs_absolutize(path, &abs_size);
    1002         if (!abs)
    1003                 return ENOMEM;
     1024        if (!abs) {
     1025                errno = ENOMEM;
     1026                return -1;
     1027        }
    10041028       
    10051029        int fd = vfs_lookup(abs, WALK_DIRECTORY);
     
    11341158        dir = opendir(path);
    11351159        if (!dir)
    1136                 return -1;
     1160                return ENOENT;
    11371161
    11381162        while ((dirent = readdir(dir)) != NULL) {
     
    11441168                if (rc < 0) {
    11451169                        closedir(dir);
    1146                         errno = rc;
    1147                         return -1;
     1170                        return rc;
    11481171                }
    11491172
     
    11521175                        free(child);
    11531176                        closedir(dir);
    1154                         errno = rc;
    1155                         return -1;
     1177                        return rc;
    11561178                }
    11571179
Note: See TracChangeset for help on using the changeset viewer.