~vojtech-horky/helenos/helenos-qemu

« back to all changes in this revision

Viewing changes to uspace/lib/posix/source/sys/stat.c

  • Committer: Vojtech Horky
  • Date: 2017-06-14 06:22:31 UTC
  • mfrom: (2103.1.569 HelenOS.mainline)
  • Revision ID: vojtechhorky@users.sourceforge.net-20170614062231-q4ui9pyxp0gs2hrl
MergeĀ mainlineĀ changes

Show diffs side-by-side

added added

removed removed

Lines of Context:
38
38
 
39
39
#include "../internal/common.h"
40
40
#include "posix/sys/stat.h"
41
 
#include "libc/sys/stat.h"
 
41
#include "libc/vfs/vfs.h"
42
42
 
43
43
#include "posix/errno.h"
44
44
#include "libc/mem.h"
48
48
 *
49
49
 * @param dest POSIX stat struct.
50
50
 * @param src HelenOS stat struct.
 
51
 *
 
52
 * @return 0 on success, -1 on error.
51
53
 */
52
 
static void stat_to_posix(struct posix_stat *dest, struct stat *src)
 
54
static int stat_to_posix(struct posix_stat *dest, struct stat *src)
53
55
{
54
56
        memset(dest, 0, sizeof(struct posix_stat));
55
57
        
67
69
        
68
70
        dest->st_nlink = src->lnkcnt;
69
71
        dest->st_size = src->size;
 
72
 
 
73
        if (src->size > INT64_MAX) {
 
74
                errno = ERANGE;
 
75
                return -1;
 
76
        }
 
77
 
 
78
        return 0;
70
79
}
71
80
 
72
81
/**
79
88
int posix_fstat(int fd, struct posix_stat *st)
80
89
{
81
90
        struct stat hst;
82
 
        int rc = negerrno(fstat, fd, &hst);
 
91
        int rc = rcerrno(vfs_stat, fd, &hst);
83
92
        if (rc < 0)
84
 
                return rc;
85
 
        stat_to_posix(st, &hst);
86
 
        return 0;
 
93
                return -1;
 
94
        return stat_to_posix(st, &hst);
87
95
}
88
96
 
89
97
/**
109
117
int posix_stat(const char *restrict path, struct posix_stat *restrict st)
110
118
{
111
119
        struct stat hst;
112
 
        int rc = negerrno(stat, path, &hst);
 
120
        int rc = rcerrno(vfs_stat_path, path, &hst);
113
121
        if (rc < 0)
114
 
                return rc;
115
 
        stat_to_posix(st, &hst);
116
 
        return 0;
 
122
                return -1;
 
123
        return stat_to_posix(st, &hst);
117
124
}
118
125
 
119
126
/**
123
130
 * @param mode Permission bits to be set.
124
131
 * @return Zero on success, -1 otherwise.
125
132
 */
126
 
int posix_chmod(const char *path, mode_t mode)
 
133
int posix_chmod(const char *path, posix_mode_t mode)
127
134
{
128
135
        /* HelenOS doesn't support permissions, return success. */
129
136
        return 0;
136
143
 *     functions. Non-permission bits are ignored.
137
144
 * @return Previous file mode creation mask.
138
145
 */
139
 
mode_t posix_umask(mode_t mask)
 
146
posix_mode_t posix_umask(posix_mode_t mask)
140
147
{
141
148
        /* HelenOS doesn't support permissions, return empty mask. */
142
149
        return 0;
143
150
}
144
151
 
 
152
/**
 
153
 * Create a directory.
 
154
 * 
 
155
 * @param path Path to the new directory.
 
156
 * @param mode Permission bits to be set.
 
157
 * @return Zero on success, -1 otherwise.
 
158
 */
 
159
int posix_mkdir(const char *path, posix_mode_t mode)
 
160
{
 
161
        int rc = rcerrno(vfs_link_path, path, KIND_DIRECTORY, NULL);
 
162
        if (rc != EOK)
 
163
                return -1;
 
164
        else
 
165
                return 0;
 
166
}
 
167
 
145
168
/** @}
146
169
 */