edced7052c1d82244d87615f21e7d320d9df9df1
[ghc-hetmet.git] / ghc / lib / std / cbits / dirUtils.c
1 /* 
2  * (c) The GRASP/AQUA Project, Glasgow University, 1994-
3  *
4  * Directory Runtime Support
5  */
6 #include "dirUtils.h"
7
8 #if defined(mingw32_TARGET_OS)
9 #include <windows.h>
10 #endif
11
12 #ifdef HAVE_STDLIB_H
13 # include <stdlib.h>
14 #endif
15 #ifdef HAVE_STDDEF_H
16 # include <stddef.h>
17 #endif
18
19 #ifdef HAVE_ERRNO_H
20 # include <errno.h>
21 #endif
22
23 #ifndef offsetof
24 #define offsetof(t, f) ((size_t) &((t *)0)->f)
25 #endif
26
27 HsInt
28 prel_mkdir(HsAddr pathName, HsInt mode)
29 {
30 #if defined(mingw32_TARGET_OS)
31   return mkdir(pathName);
32 #else
33   return mkdir(pathName,mode);
34 #endif
35 }
36
37 HsInt
38 prel_lstat(HsAddr fname, HsAddr st)
39 {
40 #ifdef HAVE_LSTAT
41   return lstat((const char*)fname, (struct stat*)st);
42 #else
43   return stat((const char*)fname, (struct stat*)st);
44 #endif
45 }
46
47 HsInt prel_s_ISDIR(mode_t m) {return S_ISDIR(m);}
48 HsInt prel_s_ISREG(mode_t m) {return S_ISREG(m);}
49
50 HsInt prel_sz_stat()  { return sizeof(struct stat); }
51 HsInt prel_path_max() { return PATH_MAX; }
52 mode_t prel_R_OK() { return R_OK; }
53 mode_t prel_W_OK() { return W_OK; }
54 mode_t prel_X_OK() { return X_OK; }
55
56 mode_t prel_S_IRUSR() { return S_IRUSR; }
57 mode_t prel_S_IWUSR() { return S_IWUSR; }
58 mode_t prel_S_IXUSR() { return S_IXUSR; }
59
60 time_t prel_st_mtime(struct stat* st) { return st->st_mtime; }
61 mode_t prel_st_mode(struct stat* st) { return st->st_mode; }
62
63 HsAddr prel_d_name(struct dirent* d)
64
65 #ifndef mingw32_TARGET_OS
66   return (HsAddr)((char*)d + (long)offsetof(struct dirent,d_name));
67 #else
68   return (HsAddr)(d->d_name);
69 #endif
70 }
71
72 HsInt prel_end_of_dir()
73 {
74 #ifndef mingw32_TARGET_OS
75   return 0;
76 #else
77   return ENOENT;
78 #endif  
79 }
80