Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/source/fcntl.c

    r8fe46a0 r6afc9d7  
    100100 *
    101101 * @param pathname Path to the file.
    102  * @param posix_flags Access mode flags.
     102 * @param flags Access mode flags.
    103103 */
    104 int posix_open(const char *pathname, int posix_flags, ...)
     104int posix_open(const char *pathname, int flags, ...)
    105105{
    106         int rc;
    107         posix_mode_t posix_mode = 0;
    108         if (posix_flags & O_CREAT) {
     106        mode_t mode = 0;
     107        if ((flags & O_CREAT) > 0) {
    109108                va_list args;
    110                 va_start(args, posix_flags);
    111                 posix_mode = va_arg(args, posix_mode_t);
     109                va_start(args, flags);
     110                mode = va_arg(args, mode_t);
    112111                va_end(args);
    113                 (void) posix_mode;
    114112        }
    115113
    116         if (((posix_flags & (O_RDONLY | O_WRONLY | O_RDWR)) == 0) ||
    117             ((posix_flags & (O_RDONLY | O_WRONLY)) == (O_RDONLY | O_WRONLY)) ||
    118             ((posix_flags & (O_RDONLY | O_RDWR)) == (O_RDONLY | O_RDWR)) ||
    119             ((posix_flags & (O_WRONLY | O_RDWR)) == (O_WRONLY | O_RDWR))) {
    120                 errno = EINVAL;
    121                 return -1;
    122         }
    123 
    124         int flags = WALK_REGULAR;
    125         if (posix_flags & O_CREAT) {
    126                 if (posix_flags & O_EXCL)
    127                         flags |= WALK_MUST_CREATE;
    128                 else
    129                         flags |= WALK_MAY_CREATE;
    130         }
    131 
    132         int mode =
    133             ((posix_flags & O_RDWR) ? MODE_READ | MODE_WRITE : 0) |
    134             ((posix_flags & O_RDONLY) ? MODE_READ : 0) |
    135             ((posix_flags & O_WRONLY) ? MODE_WRITE : 0) |
    136             ((posix_flags & O_APPEND) ? MODE_APPEND : 0);
    137 
    138         int file = rcerrno(vfs_lookup, pathname, flags);
    139         if (file < 0)
    140                 return -1;
    141 
    142         rc = rcerrno(vfs_open, file, mode);
    143         if (rc != EOK) {
    144                 vfs_put(file);
    145                 return -1;
    146         }
    147 
    148         if (posix_flags & O_TRUNC) {
    149                 if (posix_flags & (O_RDWR | O_WRONLY)) {
    150                         rc = rcerrno(vfs_resize, file, 0);
    151                         if (rc != EOK) {
    152                                 vfs_put(file);
    153                                 return -1;
    154                         }
    155                 }
    156         }
    157 
    158         return file;
     114        return negerrno(open, pathname, flags, mode);
    159115}
    160116
    161117/** @}
    162118 */
    163 
Note: See TracChangeset for help on using the changeset viewer.