source: mainline/uspace/lib/posix/sys/stat.c@ fa9815d9

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since fa9815d9 was 9b1503e, checked in by Jiří Zárevúcky <zarevucky.jiri@…>, 14 years ago

Move common.h to the internal subdirectory.

  • Property mode set to 100644
File size: 3.0 KB
Line 
1/*
2 * Copyright (c) 2011 Jiri Zarevucky
3 * Copyright (c) 2011 Petr Koupy
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:
9 *
10 * - Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer.
12 * - Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 * - The name of the author may not be used to endorse or promote products
16 * derived from this software without specific prior written permission.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */
29
30/** @addtogroup libposix
31 * @{
32 */
33/** @file
34 */
35
36#define LIBPOSIX_INTERNAL
37
38#include "stat.h"
39#include "../internal/common.h"
40#include <mem.h>
41
42/**
43 * Convert HelenOS stat struct into POSIX stat struct (if possible)
44 *
45 * @param dest
46 * @param src
47 */
48static void stat_to_posix(struct posix_stat *dest, struct stat *src)
49{
50 memset(dest, 0, sizeof(struct posix_stat));
51
52 dest->st_dev = src->device;
53
54 /* HelenOS doesn't support permissions, so we set them all */
55 dest->st_mode = S_IRWXU | S_IRWXG | S_IRWXO;
56 if (src->is_file) {
57 dest->st_mode |= S_IFREG;
58 }
59 if (src->is_directory) {
60 dest->st_mode |= S_IFDIR;
61 }
62
63 dest->st_nlink = src->lnkcnt;
64 dest->st_size = src->size;
65}
66
67/**
68 *
69 * @param fd
70 * @param st
71 * @return
72 */
73int posix_fstat(int fd, struct posix_stat *st)
74{
75 struct stat hst;
76 if (fstat(fd, &hst) == -1) {
77 // TODO: propagate a POSIX compatible errno
78 return -1;
79 }
80 stat_to_posix(st, &hst);
81 return 0;
82}
83
84/**
85 *
86 * @param path
87 * @param st
88 * @return
89 */
90int posix_lstat(const char *restrict path, struct posix_stat *restrict st)
91{
92 // TODO
93 not_implemented();
94}
95
96/**
97 *
98 * @param path
99 * @param st
100 * @return
101 */
102int posix_stat(const char *path, struct posix_stat *st)
103{
104 struct stat hst;
105 if (stat(path, &hst) == -1) {
106 // TODO: propagate a POSIX compatible errno
107 return -1;
108 }
109 stat_to_posix(st, &hst);
110 return 0;
111}
112
113/**
114 *
115 * @param path
116 * @param mode
117 * @return
118 */
119int posix_chmod(const char *path, mode_t mode)
120{
121 // TODO
122 not_implemented();
123}
124
125/**
126 *
127 * @param mask
128 * @return
129 */
130mode_t posix_umask(mode_t mask)
131{
132 // TODO
133 not_implemented();
134}
135
136/** @}
137 */
Note: See TracBrowser for help on using the repository browser.