Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/posix/sys/stat.c

    r9b1503e rec18957a  
    3636#define LIBPOSIX_INTERNAL
    3737
     38#include "../internal/common.h"
    3839#include "stat.h"
    39 #include "../internal/common.h"
    40 #include <mem.h>
     40
     41#include "../errno.h"
     42#include "../libc/mem.h"
    4143
    4244/**
    43  * Convert HelenOS stat struct into POSIX stat struct (if possible)
     45 * Convert HelenOS stat struct into POSIX stat struct (if possible).
    4446 *
    45  * @param dest
    46  * @param src
     47 * @param dest POSIX stat struct.
     48 * @param src HelenOS stat struct.
    4749 */
    4850static void stat_to_posix(struct posix_stat *dest, struct stat *src)
     
    6668
    6769/**
     70 * Retrieve file status for file associated with file descriptor.
    6871 *
    69  * @param fd
    70  * @param st
    71  * @return
     72 * @param fd File descriptor of the opened file.
     73 * @param st Status structure to be filled with information.
     74 * @return Zero on success, -1 otherwise.
    7275 */
    7376int posix_fstat(int fd, struct posix_stat *st)
    7477{
    7578        struct stat hst;
    76         if (fstat(fd, &hst) == -1) {
    77                 // TODO: propagate a POSIX compatible errno
     79        int rc = fstat(fd, &hst);
     80        if (rc < 0) {
     81                /* fstat() returns negative error code instead of using errno.
     82                 */
     83                errno = -rc;
    7884                return -1;
    7985        }
     
    8389
    8490/**
     91 * Retrieve file status for symbolic link.
    8592 *
    86  * @param path
    87  * @param st
    88  * @return
     93 * @param path Path to the symbolic link.
     94 * @param st Status structure to be filled with information.
     95 * @return Zero on success, -1 otherwise.
    8996 */
    90 int posix_lstat(const char *restrict path, struct posix_stat *restrict st)
     97int posix_lstat(const char *path, struct posix_stat *st)
    9198{
    92         // TODO
    93         not_implemented();
     99        /* There are currently no symbolic links in HelenOS. */
     100        return posix_stat(path, st);
    94101}
    95102
    96103/**
     104 * Retrieve file status for regular file (or symbolic link target).
    97105 *
    98  * @param path
    99  * @param st
    100  * @return
     106 * @param path Path to the file/link.
     107 * @param st Status structure to be filled with information.
     108 * @return Zero on success, -1 otherwise.
    101109 */
    102110int posix_stat(const char *path, struct posix_stat *st)
    103111{
    104112        struct stat hst;
    105         if (stat(path, &hst) == -1) {
    106                 // TODO: propagate a POSIX compatible errno
     113        int rc = stat(path, &hst);
     114        if (rc < 0) {
     115                /* stat() returns negative error code instead of using errno.
     116                 */
     117                errno = -rc;
    107118                return -1;
    108119        }
     
    112123
    113124/**
     125 * Change permission bits for the file if possible.
    114126 *
    115  * @param path
    116  * @param mode
    117  * @return
     127 * @param path Path to the file.
     128 * @param mode Permission bits to be set.
     129 * @return Zero on success, -1 otherwise.
    118130 */
    119131int posix_chmod(const char *path, mode_t mode)
    120132{
    121         // TODO
    122         not_implemented();
     133        /* HelenOS doesn't support permissions, return success. */
     134        return 0;
    123135}
    124136
    125137/**
     138 * Set the file mode creation mask of the process.
    126139 *
    127  * @param mask
    128  * @return
     140 * @param mask Set permission bits are cleared in the related creation
     141 *     functions. Non-permission bits are ignored.
     142 * @return Previous file mode creation mask.
    129143 */
    130144mode_t posix_umask(mode_t mask)
    131145{
    132         // TODO
    133         not_implemented();
     146        /* HelenOS doesn't support permissions, return empty mask. */
     147        return 0;
    134148}
    135149
Note: See TracChangeset for help on using the changeset viewer.