module Directory (setPermissions) where import NHC.GreenCard import PatchIOError import DPermissions %-#include %-#include %fun setperms :: Permissions -> FilePath -> IO Int %call (perms r w x s) (filePath fp) %code % struct stat st; % mode_t m; % err = stat(fp,&st); % if (err==0) { % m = st.st_mode & ~(S_IREAD|S_IWRITE|S_IEXEC); /* blank out modes */ % if (r) m |= S_IREAD; % if (w) m |= S_IWRITE; % if (x||s) m |= S_IEXEC; % err = chmod(fp,m); % } %result (int err) setPermissions :: FilePath -> Permissions -> IO () setPermissions fp ps = patchIOErrorF "setPermissions" fp (setperms ps)