diff options
Diffstat (limited to 'mdk-stage1/slang/slposdir.c')
| -rw-r--r-- | mdk-stage1/slang/slposdir.c | 1057 | 
1 files changed, 0 insertions, 1057 deletions
diff --git a/mdk-stage1/slang/slposdir.c b/mdk-stage1/slang/slposdir.c deleted file mode 100644 index 33799e574..000000000 --- a/mdk-stage1/slang/slposdir.c +++ /dev/null @@ -1,1057 +0,0 @@ -/* file intrinsics for S-Lang */ -/* Copyright (c) 1992, 1999, 2001 John E. Davis - * This file is part of the S-Lang library. - * - * You may distribute under the terms of either the GNU General Public - * License or the Perl Artistic License. - */ - -#include "slinclud.h" - -#if defined(__unix__) || (defined (__os2__) && defined (__EMX__)) -# include <sys/types.h> -#endif - -#ifdef HAVE_IO_H -# include <io.h>		       /* for chmod */ -#endif - -#if defined(__BORLANDC__) -# include <process.h> -# include <dos.h> -#endif - -#ifdef HAVE_FCNTL_H -# include <fcntl.h> -#endif -#ifdef HAVE_SYS_FCNTL_H -# include <sys/fcntl.h> -#endif - -#ifdef __unix__ -# include <sys/file.h> -#endif - -#if defined(__BORLANDC__) -# include <dir.h> -#endif - -#if defined(_MSC_VER) -# include <io.h> -#endif - -#if defined(__DECC) && defined(VMS) -# include <unixio.h> -# include <unixlib.h> -#endif - -#ifdef VMS -# include <stat.h> -#else -# include <sys/stat.h> -#endif - -#if defined(VMS) -# define USE_LISTDIR_INTRINSIC	0 -#else -# define USE_LISTDIR_INTRINSIC	1 -#endif - -#if USE_LISTDIR_INTRINSIC - -#if defined(__WIN32__) -# include <windows.h> -#else -# if defined(__OS2__) && defined(__IBMC__) -#  define INCL_DOS -#  define INCL_ERRORS -#  include <os2.h> -#  include <direct.h> -#  include <ctype.h> -# else -#  ifdef HAVE_DIRENT_H -#   include <dirent.h> -#  else -#   ifdef HAVE_DIRECT_H -#    include <direct.h> -#   else -#    define dirent direct -#    define NEED_D_NAMLEN -#    if HAVE_SYS_NDIR_H -#     include <sys/ndir.h> -#    endif -#    if HAVE_SYS_DIR_H -#     include <sys/dir.h> -#    endif -#    if HAVE_NDIR_H -#     include <ndir.h> -#    endif -#   endif -#  endif -# endif -#endif - -#endif				       /* USE_LISTDIR_INTRINSIC */ - -#include <errno.h> - -#include "slang.h" -#include "_slang.h" - -static int push_stat_struct (struct stat *st, int opt_attrs) -{ -   char *field_names [12]; -   unsigned char field_types[12]; -   VOID_STAR field_values [12]; -   int int_values [12]; -   unsigned int i; - -   field_names [0] = "st_dev"; int_values [0] = (int) st->st_dev; -   field_names [1] = "st_ino"; int_values [1] = (int) st->st_ino; -   field_names [2] = "st_mode"; int_values [2] = (int) st->st_mode; -   field_names [3] = "st_nlink"; int_values [3] = (int) st->st_nlink; -   field_names [4] = "st_uid"; int_values [4] = (int) st->st_uid; -   field_names [5] = "st_gid"; int_values [5] = (int) st->st_gid; -   field_names [6] = "st_rdev"; int_values [6] = (int) st->st_rdev; -   field_names [7] = "st_size"; int_values [7] = (int) st->st_size; -   field_names [8] = "st_atime"; int_values [8] = (int) st->st_atime; -   field_names [9] = "st_mtime"; int_values [9] = (int) st->st_mtime; -   field_names [10] = "st_ctime"; int_values [10] = (int) st->st_ctime; - -   field_names [11] = "st_opt_attrs"; int_values[11] = opt_attrs; - -   for (i = 0; i < 12; i++) -     { -	field_types [i] = SLANG_INT_TYPE; -	field_values [i] = (VOID_STAR) (int_values + i); -     } - -   return SLstruct_create_struct (12, field_names, field_types, field_values); -} - -static void stat_cmd (char *file) -{ -   struct stat st; -   int status; -   int opt_attrs; - -   status = stat (file, &st); - -#if defined(__MSDOS__) || defined(__WIN32__) -   if (status == -1) -     { -	unsigned int len = strlen (file); -	if (len && ((file[len-1] == '\\') || (file[len-1] == '/'))) -	  { -	     file = SLmake_nstring (file, len-1); -	     if (file == NULL) -	       return; - -	     status = stat (file, &st); -	     SLfree (file); -	  } -     } -#endif -   if (status == -1) -     { -	_SLerrno_errno = errno; -	SLang_push_null (); -	return; -     } - -#ifdef __WIN32__ -   opt_attrs = GetFileAttributes (file); -#else -   opt_attrs = 0; -#endif - -   push_stat_struct (&st, opt_attrs); -} - -static void lstat_cmd (char *file) -{ -#ifdef HAVE_LSTAT -   struct stat st; -   int opt_attrs; - -   if (-1 == lstat (file, &st)) -     { -	_SLerrno_errno = errno; -	SLang_push_null (); -	return; -     } - -#ifdef __WIN32__ -   opt_attrs = GetFileAttributes (file); -#else -   opt_attrs = 0; -#endif -    -   push_stat_struct (&st, opt_attrs); -#else -   stat_cmd (file); -#endif -} - -/* Well, it appears that on some systems, these are not defined.  Here I - * provide them.  These are derived from the Linux stat.h file. - */ - -#ifdef __os2__ -# ifdef __IBMC__ -/* IBM VA3 doesn't declare S_IFMT */ -#  define	S_IFMT	(S_IFDIR | S_IFCHR | S_IFREG) -# endif -#endif - -#ifndef S_ISLNK -# ifdef S_IFLNK -#   define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) -# else -#   define S_ISLNK(m) 0 -# endif -#endif - -#ifndef S_ISREG -# ifdef S_IFREG -#   define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) -# else -#   define S_ISREG(m) 0 -# endif -#endif - -#ifndef S_ISDIR -# ifdef S_IFDIR -#   define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) -# else -#   define S_ISDIR(m) 0 -# endif -#endif - -#ifndef S_ISCHR -# ifdef S_IFCHR -#   define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) -# else -#   define S_ISCHR(m) 0 -# endif -#endif - -#ifndef S_ISBLK -# ifdef S_IFBLK -#   define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) -# else -#   define S_ISBLK(m) 0 -# endif -#endif - -#ifndef S_ISFIFO -# ifdef S_IFIFO -#   define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) -# else -#   define S_ISFIFO(m) 0 -# endif -#endif - -#ifndef S_ISSOCK -# ifdef S_IFSOCK -#   define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) -# else -#   define S_ISSOCK(m) 0 -# endif -#endif - -static char stat_is_cmd (char *what, int *mode_ptr) -{ -   int ret; -   int st_mode = *mode_ptr; - -   if (!strcmp (what, "sock")) ret = S_ISSOCK(st_mode); -   else if (!strcmp (what, "fifo")) ret = S_ISFIFO(st_mode); -   else if (!strcmp (what, "blk")) ret = S_ISBLK(st_mode); -   else if (!strcmp (what, "chr")) ret = S_ISCHR(st_mode); -   else if (!strcmp (what, "dir")) ret = S_ISDIR(st_mode); -   else if (!strcmp (what, "reg")) ret = S_ISREG(st_mode); -   else if (!strcmp (what, "lnk")) ret = S_ISLNK(st_mode); -   else -     { -	SLang_verror (SL_INVALID_PARM, "stat_is: Unrecognized type: %s", what); -	return -1; -     } - -   return (char) (ret != 0); -} - -#ifdef HAVE_READLINK -static void readlink_cmd (char *s) -{ -   char buf[2048]; -   int n; - -   n = readlink (s, buf, sizeof (buf)-1); -   if (n == -1) -     { -	_SLerrno_errno = errno; -	s = NULL; -     } -   else -     { -	buf[n] = 0; -	s = buf; -     } - -   (void) SLang_push_string (s); -} -#endif - -static int chmod_cmd (char *file, int *mode) -{ -   if (-1 == chmod(file, (mode_t) *mode)) -     { -	_SLerrno_errno = errno; -	return -1; -     } -   return 0; -} - -#ifdef HAVE_CHOWN -static int chown_cmd (char *file, int *owner, int *group) -{ -   int ret; - -   if (-1 == (ret = chown(file, (uid_t) *owner, (gid_t) *group))) -     _SLerrno_errno = errno; -   return ret; -} -#endif - -/* add trailing slash to dir */ -static void fixup_dir (char *dir) -{ -#ifndef VMS -   int n; - -   if ((n = strlen(dir)) > 1) -     { -	n--; -#if defined(IBMPC_SYSTEM) -      if ( dir[n] != '/' && dir[n] != '\\' ) -      	strcat(dir, "\\" ); -#else -      if (dir[n] != '/' ) -      	strcat(dir, "/" ); -#endif -     } -#endif /* !VMS */ -} - -static void slget_cwd (void) -{ -   char cwd[1024]; -   char *p; - -#ifndef HAVE_GETCWD -   p = getwd (cwd); -#else -# if defined (__EMX__) -   p = _getcwd2(cwd, 1022);	       /* includes drive specifier */ -# else -   p = getcwd(cwd, 1022);	       /* djggp includes drive specifier */ -# endif -#endif - -   if (p == NULL) -     { -	_SLerrno_errno = errno; -	SLang_push_null (); -	return; -     } - -#ifndef VMS -#ifdef __GO32__ -   /* You never know about djgpp since it favors unix */ -     { -	char ch; -	p = cwd; -	while ((ch = *p) != 0) -	  { -	     if (ch == '/') *p = '\\'; -	     p++; -	  } -     } -#endif -   fixup_dir (cwd); -#endif -   SLang_push_string (cwd); -} - -static int chdir_cmd (char *s) -{ -   int ret; - -   while (-1 == (ret = chdir (s))) -     { -#ifdef EINTR -	if (errno == EINTR) -	  continue; -#endif -	_SLerrno_errno = errno; -	break; -     } -   return ret; -} - -#ifdef VMS -static int remove_cmd (char *); -/* If the file looks like xxx, then change it to xxx.dir.  If - * it looks like A:[B.xxx] then change it to A:[B]xxx.dir. - */ - -static char *vms_convert_dirspec_to_vms_dir (char *str) -{ -   char *s; -   char *version; -   unsigned int len; -   char *dot; - -   len = strlen (str); - -   version = strchr (str, ';'); -   if (version == NULL) -     version = str + len; -   /* version points to the version of the input string */ - -    -   if (NULL == (s = SLmalloc (len + 8)))/* allow extra space to work with */ -     return NULL; - -   len = (unsigned int) (version - str); -   strncpy (s, str, len); -   s[len] = 0; -   str = s; -    -   /* Lowercase the whole thing */ -   while (*s != 0) -     { -	*s = LOWER_CASE(*s); -	s++; -     } - -   if ((s > str) -       && (s[-1] != ']')) -     { -	if ((s >= str + 4) -	    && (0 == strcmp (s - 4, ".dir"))) -	  s -= 4; -	goto add_dir_version; -     } - -   /* Check for one of two possibilities: -    *  -    *     dev:[x]   --> dev:x -    *     dev:[a.x] --> dev:[a]x -    */ -    -   if (NULL == (dot = strchr (str, '.'))) -     { -	/* First possibility */ -	if (NULL == (s = strchr (str, '['))) -	  return str;		       /* let someone else figure this out */ -	while (s[1] != ']') -	  { -	     s[0] = s[1]; -	     s++; -	  } -	*s = 0; -	goto add_dir_version; -     } -    -   while (NULL != (s = strchr (dot + 1, '.'))) -     dot = s; -    -   *dot = ']'; -   s = str + (len - 1); -    -   /* Drop */ - -   add_dir_version: -   strcpy (s, ".dir"); -   strcpy (s+4, version); -   return str; -} -#endif - -static int rmdir_cmd (char *s) -{ -#ifdef VMS -   int status; - -   if (NULL == (s = vms_convert_dirspec_to_vms_dir (s))) -     return -1; -    -   status = remove_cmd (s); -   SLfree (s); -    -   return status; - -#else -   int ret; - -   while (-1 == (ret = rmdir (s))) -     { -#ifdef EINTR -	if (errno == EINTR) -	  continue; -#endif -	_SLerrno_errno = errno; -	break; -     } -   return ret; -#endif -} - -static int remove_cmd (char *s) -{ -   int ret; -#ifdef VMS -# define REMOVE delete -#else -# ifdef REAL_UNIX_SYSTEM -#  define REMOVE unlink -# else -#  define REMOVE remove -# endif -#endif - -   while (-1 == (ret = REMOVE (s))) -     { -#ifdef EINTR -	if (errno == EINTR) -	  continue; -#endif -	_SLerrno_errno = errno; -	break; -     } -   return ret; -} - -static int rename_cmd (char *oldpath, char *newpath) -{ -   int ret; -   while (-1 == (ret = rename (oldpath, newpath))) -     { -#ifdef EINTR -	if (errno == EINTR) -	  continue; -#endif -	_SLerrno_errno = errno; -	break; -     } -   return ret; -} - -static int mkdir_cmd (char *s, int *mode_ptr) -{ -   int ret; - -   (void) mode_ptr; -   errno = 0; - -#if defined (__MSDOS__) && !defined(__GO32__) -# define MKDIR(x,y) mkdir(x) -#else -# if defined (__os2__) && !defined (__EMX__) -#  define MKDIR(x,y) mkdir(x) -# else -#  if defined (__WIN32__) && !defined (__CYGWIN32__) -#   define MKDIR(x,y) mkdir(x) -#  else -#   define MKDIR mkdir -#  endif -# endif -#endif - -   while (-1 == (ret = MKDIR(s, *mode_ptr))) -     { -#ifdef EINTR -	if (errno == EINTR) -	  continue; -#endif -	_SLerrno_errno = errno; -	break; -     } -   return ret; -} - -#ifdef HAVE_MKFIFO -static int mkfifo_cmd (char *path, int *mode) -{ -   if (-1 == mkfifo (path, *mode)) -     { -	_SLerrno_errno = errno; -	return -1; -     } -   return 0; -} -#endif - -#if USE_LISTDIR_INTRINSIC - -static void free_dir_list (char **list, unsigned int num) -{ -   unsigned int i; - -   if (list == NULL) -     return; - -   for (i = 0; i < num; i++) -     SLang_free_slstring (list[i]); -   SLfree ((char *) list); -} - -#if defined(__WIN32__) || defined(__os2__) && defined(__IBMC__) -static int build_dirlist (char *file, char *opt, char ***listp, unsigned int *nump, unsigned int *maxnum) -{ -# ifdef __WIN32__ -   DWORD status; -   HANDLE h; -   WIN32_FIND_DATA fd; -# else -   APIRET rc; -   FILESTATUS3 status; -   HDIR h; -   FILEFINDBUF3 fd; -   ULONG cFileNames; -# endif -   char *pat; -   unsigned int len; -   char **list; -   unsigned int num; -   unsigned int max_num; -   int hok; - -   /* If an option is present, assume ok to list hidden files.  Later -    * I will formalize this. -    */ -   hok = (opt != NULL); - -# ifdef __WIN32__ -   status = GetFileAttributes (file); -# else -   rc = DosQueryPathInfo(file, FIL_STANDARD, &status, sizeof(FILESTATUS3)); -# endif - - -# ifdef __WIN32__ -   if (status == (DWORD)-1) -     { -	_SLerrno_errno = ENOENT; -	return -1; -     } -   if (0 == (status & FILE_ATTRIBUTE_DIRECTORY)) -     { -	_SLerrno_errno = ENOTDIR; -	return -1; -     } -# else -   if ((rc != 0) || (status.attrFile & FILE_DIRECTORY) == 0) -     { -	/* ENOTDIR isn't defined in VA3. */ -	_SLerrno_errno = ENOENT; -	return -1; -     } -# endif - -   len = strlen (file); -   pat = SLmalloc (len + 3); -   if (pat == NULL) -     return -1; - -   strcpy (pat, file); -   file = pat; -   while (*file != 0) -     { -	if (*file == '/') *file = '\\'; -	file++; -     } - -   if (len && (pat[len-1] != '\\')) -     { -	pat[len] = '\\'; -	len++; -     } -   pat[len++] = '*'; -   pat[len] = 0; - -   num = 0; -   max_num = 50; -   list = (char **)SLmalloc (max_num * sizeof(char *)); -   if (list == NULL) -     { -	SLfree (pat); -	return -1; -     } - -# ifdef __WIN32__ -   h = FindFirstFile(pat, &fd); -   if (h == INVALID_HANDLE_VALUE) -     { -	if (ERROR_NO_MORE_FILES != GetLastError()) -	  { -	     SLfree (pat); -	     SLfree ((char *)list); -	     return -1; -	  } -     } -# else -   h = HDIR_CREATE; -   cFileNames = 1; -   rc = DosFindFirst(pat, &h, FILE_READONLY | FILE_DIRECTORY | -		     FILE_ARCHIVED, &fd, sizeof(fd), &cFileNames, FIL_STANDARD); -   if (rc != 0) -     { -	if (rc != ERROR_NO_MORE_FILES) -	  { -	     SLfree (pat); -	     SLfree ((char *)list); -	     return -1; -	  } -     } -# endif    -   else while (1) -     { -	/* Do not include hidden files in the list.  Also, do not -	 * include "." and ".." entries. -	 */ -#ifdef __WIN32__ -	file = fd.cFileName; -#else -	file = fd.achName; -#endif -	if ( -#ifdef __WIN32__ -	    (hok || (0 == (fd.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN))) -#else -	    (hok || (0 == (fd.attrFile & FILE_HIDDEN))) -#endif -	    && ((*file != '.') -		|| ((0 != strcmp (file, ".")) -		    && (0 != strcmp (file, ".."))))) -	  { -	     if (num == max_num) -	       { -		  char **new_list; - -		  max_num += 100; -		  new_list = (char **)SLrealloc ((char *)list, max_num * sizeof (char *)); -		  if (new_list == NULL) -		    goto return_error; - -		  list = new_list; -	       } - -	     file = SLang_create_slstring (file); -	     if (file == NULL) -	       goto return_error; - -	     list[num] = file; -	     num++; -	  } - -#ifdef __WIN32__ -	if (FALSE == FindNextFile(h, &fd)) -	  { -	     if (ERROR_NO_MORE_FILES == GetLastError()) -	       { -		  FindClose (h); -		  break; -	       } - -	     _SLerrno_errno = errno; -	     FindClose (h); -	     goto return_error; -	  } -#else -        cFileNames = 1; -        rc = DosFindNext(h, &fd, sizeof(fd), &cFileNames); -        if (rc != 0) -	  { -	     if (rc == ERROR_NO_MORE_FILES) -	       { -		  DosFindClose (h); -		  break; -	       } - -	     _SLerrno_errno = errno; -	     DosFindClose (h); -	     goto return_error; -	  } -#endif -     } - -   SLfree (pat); -   *maxnum = max_num; -   *nump = num; -   *listp = list; -   return 0; - -   return_error: -   free_dir_list (list, num); -   SLfree (pat); -   return -1; -} - -#else				       /* NOT __WIN32__ */ - -static int build_dirlist (char *dir, char *opt, char ***listp, unsigned int *nump, unsigned int *maxnum) -{ -   DIR *dp; -   struct dirent *ep; -   unsigned int num_files; -   unsigned int max_num_files; -   char **list; - -   (void) opt; - -   if (NULL == (dp = opendir (dir))) -     { -	_SLerrno_errno = errno; -	return -1; -     } - -   num_files = max_num_files = 0; -   list = NULL; -   while (NULL != (ep = readdir (dp))) -     { -	unsigned int len; -	char *name; - -	name = ep->d_name; -#  ifdef NEED_D_NAMLEN -	len = ep->d_namlen; -#  else -	len = strlen (name); -#  endif -	if ((*name == '.') && (len <= 2)) -	  { -	     if (len == 1) continue; -	     if (name [1] == '.') continue; -	  } - -	if (num_files == max_num_files) -	  { -	     char **new_list; - -	     max_num_files += 100; -	     if (NULL == (new_list = (char **) SLrealloc ((char *)list, max_num_files * sizeof(char *)))) -	       goto return_error; - -	     list = new_list; -	  } - -	if (NULL == (list[num_files] = SLang_create_nslstring (name, len))) -	  goto return_error; - -	num_files++; -     } - -   closedir (dp); -   *nump = num_files; -   *maxnum = max_num_files; -   *listp = list; -   return 0; - -   return_error: -   if (dp != NULL) -     closedir (dp); -   free_dir_list (list, num_files); -   return -1; -} -# endif				       /* NOT __WIN32__ */ - -static void listdir_cmd (char *dir, char *opt) -{ -   SLang_Array_Type *at; -   unsigned int num_files; -   unsigned int max_num_files; -   int inum_files; -   char **list; - -   if (-1 == build_dirlist (dir, opt, &list, &num_files, &max_num_files)) -     { -	SLang_push_null (); -	return; -     } -   /* If max_num_files == 0, then num_files == 0 and list == NULL.   -    * The realloc step below will malloc list for us. -    */ -   if (num_files + 1 < max_num_files) -     { -	char **new_list; -	if (NULL == (new_list = (char **) SLrealloc ((char *)list, (num_files + 1)* sizeof(char*)))) -	  { -	     free_dir_list (list, num_files); -	     SLang_push_null (); -	     return; -	  } -	list = new_list; -     } - -   inum_files = (int) num_files; -   if (NULL == (at = SLang_create_array (SLANG_STRING_TYPE, 0, (VOID_STAR) list, &inum_files, 1))) -     { -	free_dir_list (list, num_files); -	SLang_push_null (); -	return; -     } - -   /* Allow the array to free this list if push fails */ -   if (-1 == SLang_push_array (at, 1)) -     SLang_push_null (); -} - -static void listdir_cmd_wrap (void) -{ -   char *s, *sopt; - -   sopt = NULL; -   switch (SLang_Num_Function_Args) -     { -      case 2: -	if (-1 == SLang_pop_slstring (&sopt)) -	  return; -      case 1: -	if (-1 == SLang_pop_slstring (&s)) -	  { -	     SLang_free_slstring (sopt); -	     return; -	  } -	break; -      default: -	SLang_verror (SL_INVALID_PARM, "usage: listdir (string, [opt-string]"); -	return; -     } - -   listdir_cmd (s, sopt); -   SLang_free_slstring (s); -   SLang_free_slstring (sopt); -} - -#endif				       /* USE_LISTDIR_INTRINSIC */ - -#ifdef HAVE_UMASK -static int umask_cmd (int *u) -{ -   return umask (*u); -} -#endif - -static SLang_Intrin_Fun_Type PosixDir_Name_Table [] = -{ -#ifdef HAVE_READLINK -   MAKE_INTRINSIC_S("readlink", readlink_cmd, SLANG_VOID_TYPE), -#endif -   MAKE_INTRINSIC_S("lstat_file", lstat_cmd, SLANG_VOID_TYPE), -   MAKE_INTRINSIC_S("stat_file", stat_cmd, SLANG_VOID_TYPE), -   MAKE_INTRINSIC_SI("stat_is", stat_is_cmd, SLANG_CHAR_TYPE), -#ifdef HAVE_MKFIFO -   MAKE_INTRINSIC_SI("mkfifo", mkfifo_cmd, SLANG_INT_TYPE), -#endif -#ifdef HAVE_CHOWN -   MAKE_INTRINSIC_SII("chown", chown_cmd, SLANG_INT_TYPE), -#endif -   MAKE_INTRINSIC_SI("chmod", chmod_cmd, SLANG_INT_TYPE), -#ifdef HAVE_UMASK -   MAKE_INTRINSIC_I("umask", umask_cmd, SLANG_INT_TYPE), -#endif -   MAKE_INTRINSIC_0("getcwd", slget_cwd, SLANG_VOID_TYPE), -   MAKE_INTRINSIC_SI("mkdir", mkdir_cmd, SLANG_INT_TYPE), -   MAKE_INTRINSIC_S("chdir", chdir_cmd, SLANG_INT_TYPE), -   MAKE_INTRINSIC_S("rmdir", rmdir_cmd, SLANG_INT_TYPE), -   MAKE_INTRINSIC_S("remove", remove_cmd, SLANG_INT_TYPE), -   MAKE_INTRINSIC_SS("rename", rename_cmd, SLANG_INT_TYPE), -#if USE_LISTDIR_INTRINSIC -   MAKE_INTRINSIC("listdir", listdir_cmd_wrap, SLANG_VOID_TYPE, 0), -#endif -   SLANG_END_INTRIN_FUN_TABLE -}; - -static SLang_IConstant_Type PosixDir_Consts [] = -{ -#ifndef S_IRWXU -# define S_IRWXU 00700 -#endif -   MAKE_ICONSTANT("S_IRWXU", S_IRWXU), -#ifndef S_IRUSR -# define S_IRUSR 00400 -#endif -   MAKE_ICONSTANT("S_IRUSR", S_IRUSR), -#ifndef S_IWUSR -# define S_IWUSR 00200 -#endif -   MAKE_ICONSTANT("S_IWUSR", S_IWUSR), -#ifndef S_IXUSR -# define S_IXUSR 00100 -#endif -   MAKE_ICONSTANT("S_IXUSR", S_IXUSR), -#ifndef S_IRWXG -# define S_IRWXG 00070 -#endif -   MAKE_ICONSTANT("S_IRWXG", S_IRWXG), -#ifndef S_IRGRP -# define S_IRGRP 00040 -#endif -   MAKE_ICONSTANT("S_IRGRP", S_IRGRP), -#ifndef S_IWGRP -# define S_IWGRP 00020 -#endif -   MAKE_ICONSTANT("S_IWGRP", S_IWGRP), -#ifndef S_IXGRP -# define S_IXGRP 00010 -#endif -   MAKE_ICONSTANT("S_IXGRP", S_IXGRP), -#ifndef S_IRWXO -# define S_IRWXO 00007 -#endif -   MAKE_ICONSTANT("S_IRWXO", S_IRWXO), -#ifndef S_IROTH -# define S_IROTH 00004 -#endif -   MAKE_ICONSTANT("S_IROTH", S_IROTH), -#ifndef S_IWOTH -# define S_IWOTH 00002 -#endif -   MAKE_ICONSTANT("S_IWOTH", S_IWOTH), -#ifndef S_IXOTH -# define S_IXOTH 00001 -#endif -   MAKE_ICONSTANT("S_IXOTH", S_IXOTH), -#ifdef __WIN32__ -   MAKE_ICONSTANT("FILE_ATTRIBUTE_ARCHIVE", FILE_ATTRIBUTE_ARCHIVE), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_COMPRESSED", FILE_ATTRIBUTE_COMPRESSED), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_NORMAL", FILE_ATTRIBUTE_NORMAL), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_DIRECTORY", FILE_ATTRIBUTE_DIRECTORY), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_HIDDEN", FILE_ATTRIBUTE_HIDDEN), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_READONLY", FILE_ATTRIBUTE_READONLY), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_SYSTEM", FILE_ATTRIBUTE_SYSTEM), -   MAKE_ICONSTANT("FILE_ATTRIBUTE_TEMPORARY", FILE_ATTRIBUTE_TEMPORARY), -#endif -   SLANG_END_ICONST_TABLE -}; - -static int Initialized; - -int SLang_init_posix_dir (void) -{ -   if (Initialized) -     return 0; - -   if ((-1 == SLadd_intrin_fun_table(PosixDir_Name_Table, "__POSIX_DIR__")) -       || (-1 == SLadd_iconstant_table (PosixDir_Consts, NULL)) -       || (-1 == _SLerrno_init ())) -     return -1; - -   Initialized = 1; - -   return 0; -} -  | 
