From 6e09114d178d56dab6633126583c1821f589e27d Mon Sep 17 00:00:00 2001 From: sof Date: Wed, 7 Nov 2001 07:57:57 +0000 Subject: [PATCH] [project @ 2001-11-07 07:57:57 by sof] Wrapper functions reqd to implement Directory --- ghc/lib/std/cbits/dirUtils.c | 66 ++++++++++++++++++++++++++++++++++++++++++ ghc/lib/std/cbits/dirUtils.h | 39 +++++++++++++++++++++++++ 2 files changed, 105 insertions(+) create mode 100644 ghc/lib/std/cbits/dirUtils.c create mode 100644 ghc/lib/std/cbits/dirUtils.h diff --git a/ghc/lib/std/cbits/dirUtils.c b/ghc/lib/std/cbits/dirUtils.c new file mode 100644 index 0000000..40c846b --- /dev/null +++ b/ghc/lib/std/cbits/dirUtils.c @@ -0,0 +1,66 @@ +/* + * (c) The GRASP/AQUA Project, Glasgow University, 1994- + * + * Directory Runtime Support + */ +#include "dirUtils.h" + +#if defined(mingw32_TARGET_OS) +#include +#include +#endif + +HsInt +prel_mkdir(HsAddr pathName, HsInt mode) +{ +#if defined(mingw32_TARGET_OS) + return mkdir(pathName); +#else + return mkdir(pathName,mode); +#endif +} + +HsInt +prel_lstat(HsAddr fname, HsAddr st) +{ +#ifdef HAVE_LSTAT + return lstat((const char*)fname, (struct stat*)st); +#else + return stat((const char*)fname, (struct stat*)st); +#endif +} + +HsInt prel_s_ISDIR(mode_t m) {return S_ISDIR(m);} +HsInt prel_s_ISREG(mode_t m) {return S_ISREG(m);} + +HsInt prel_sz_stat() { return sizeof(struct stat); } +HsInt prel_path_max() { return PATH_MAX; } +mode_t prel_R_OK() { return R_OK; } +mode_t prel_W_OK() { return W_OK; } +mode_t prel_X_OK() { return X_OK; } + +mode_t prel_S_IRUSR() { return S_IRUSR; } +mode_t prel_S_IWUSR() { return S_IWUSR; } +mode_t prel_S_IXUSR() { return S_IXUSR; } + +time_t prel_st_mtime(struct stat* st) { return st->st_mtime; } +mode_t prel_st_mode(struct stat* st) { return st->st_mode; } + +HsAddr prel_d_name(struct dirent* d) +{ +#ifndef mingw32_TARGET_OS + return (HsAddr)((char*)d + (long)offsetof(struct dirent,d_name)); +#else + return (HsAddr)(d->d_name); +#endif +} + +HsInt prel_end_of_dir() +{ +#ifndef mingw32_TARGET_OS + return EOK; +#else + return ENOENT; +#endif +} + diff --git a/ghc/lib/std/cbits/dirUtils.h b/ghc/lib/std/cbits/dirUtils.h new file mode 100644 index 0000000..187523a --- /dev/null +++ b/ghc/lib/std/cbits/dirUtils.h @@ -0,0 +1,39 @@ +/* + * (c) The GRASP/AQUA Project, Glasgow University, 1994- + * + * Directory Runtime Support - prototypes. + */ +#ifndef __DIRUTILS_H__ +#define __DIRUTILS_H__ +#include "HsStd.h" + +#include +#include +#include +#include +#include + +extern HsInt prel_mkdir(HsAddr pathName, HsInt mode); +extern HsInt prel_lstat(HsAddr fname, HsAddr st); + +extern HsInt prel_s_ISDIR(mode_t m); +extern HsInt prel_s_ISREG(mode_t m); + +extern HsInt prel_sz_stat(); +extern HsInt prel_path_max(); +extern mode_t prel_R_OK(); +extern mode_t prel_W_OK(); +extern mode_t prel_X_OK(); + +extern mode_t prel_S_IRUSR(); +extern mode_t prel_S_IWUSR(); +extern mode_t prel_S_IXUSR(); + +extern time_t prel_st_mtime(struct stat* st); +extern mode_t prel_st_mode(struct stat* st); + +extern HsAddr prel_d_name(struct dirent* d); + +extern HsInt prel_end_of_dir(); + +#endif /* __DIRUTILS_H__ */ -- 1.7.10.4