diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2013-02-11 20:56:07 +0200 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2013-02-11 20:56:07 +0200 |
commit | 0c0982740c0afda6ec893e6fcd361533033331f4 (patch) | |
tree | f1d443122f401456140b2d3f493c8d0d10248530 | |
parent | ba18cde06b1c80426fdc9d5e6dff793d44bb0bc8 (diff) | |
download | egawk-0c0982740c0afda6ec893e6fcd361533033331f4.tar.gz egawk-0c0982740c0afda6ec893e6fcd361533033331f4.tar.bz2 egawk-0c0982740c0afda6ec893e6fcd361533033331f4.zip |
Fixes to extensions for Win 32.
-rw-r--r-- | extension/ChangeLog | 8 | ||||
-rw-r--r-- | extension/filefuncs.c | 31 | ||||
-rw-r--r-- | extension/time.c | 12 |
3 files changed, 50 insertions, 1 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index 231961f1..9304e5b8 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,11 @@ +2013-02-11 Eli Zaretskii <eliz@gnu.org> + + * filefuncs.c (S_ISLNK, lstat, readlink, S_IRGRP, S_IWGRP, S_IXGRP, + S_IROTH, S_IWOTH, S_IXOTH, S_ISUID, S_ISGID, S_ISVTX, major, minor): + Define if needed. + (fill_stat_array, init_filefuncs, func_table): Fix for Win 32. + * time.c: Port to Win 32. + 2013-01-27 Arnold D. Robbins <arnold@skeeve.com> * gawkdirfd.h: New file. diff --git a/extension/filefuncs.c b/extension/filefuncs.c index 123aad3c..a4ae7560 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -55,6 +55,26 @@ #include "gawkfts.h" #include "stack.h" +#ifndef S_IFLNK +#define lstat stat +#define S_ISLNK(s) 0 +#define readlink(f,b,bs) (-1) +#endif + +#ifdef _WIN32 +#define S_IRGRP S_IRUSR +#define S_IWGRP S_IWUSR +#define S_IXGRP S_IXUSR +#define S_IROTH S_IRUSR +#define S_IWOTH S_IWUSR +#define S_IXOTH S_IXUSR +#define S_ISUID 0 +#define S_ISGID 0 +#define S_ISVTX 0 +#define major(s) (s) +#define minor(s) (0) +#endif + static const gawk_api_t *api; /* for convenience macros to work */ static awk_ext_id_t *ext_id; static awk_bool_t init_filefuncs(void); @@ -288,7 +308,11 @@ fill_stat_array(const char *name, awk_array_t array, struct stat *sbuf) array_set_numeric(array, "uid", sbuf->st_uid); array_set_numeric(array, "gid", sbuf->st_gid); array_set_numeric(array, "size", sbuf->st_size); +#ifdef _WIN32 + array_set_numeric(array, "blocks", sbuf->st_size / 4096); +#else array_set_numeric(array, "blocks", sbuf->st_blocks); +#endif array_set_numeric(array, "atime", sbuf->st_atime); array_set_numeric(array, "mtime", sbuf->st_mtime); array_set_numeric(array, "ctime", sbuf->st_ctime); @@ -391,6 +415,7 @@ init_filefuncs(void) int i; awk_value_t value; +#ifndef _WIN32 /* at least right now, only FTS needs initializing */ static struct flagtab { const char *name; @@ -414,9 +439,12 @@ init_filefuncs(void) errors++; } } +#endif return errors == 0; } +#ifndef _WIN32 + static int fts_errors = 0; /* fill_stat_element --- fill in stat element of array */ @@ -719,11 +747,14 @@ out: return make_number(ret, result); } +#endif /* !_WIN32 */ static awk_ext_func_t func_table[] = { { "chdir", do_chdir, 1 }, { "stat", do_stat, 2 }, +#ifndef _WIN32 { "fts", do_fts, 3 }, +#endif }; diff --git a/extension/time.c b/extension/time.c index 89811c41..dcafb8fa 100644 --- a/extension/time.c +++ b/extension/time.c @@ -61,6 +61,9 @@ int plugin_is_GPL_compatible; #if defined(HAVE_NANOSLEEP) && defined(HAVE_TIME_H) #include <time.h> #endif +#if defined(HAVE_GETSYSTEMTIMEASFILETIME) +#include <windows.h> +#endif /* * Returns time since 1/1/1970 UTC as a floating point value; should @@ -160,10 +163,17 @@ do_sleep(int nargs, awk_value_t *result) /* probably interrupted */ update_ERRNO_int(errno); } +#elif defined(HAVE_GETSYSTEMTIMEASFILETIME) + { + DWORD milliseconds = secs * 1000; + + Sleep (milliseconds); + rc = 0; + } #else /* no way to sleep on this platform */ rc = -1; - update_ERRNO_str(_("sleep: not supported on this platform")); + update_ERRNO_string(_("sleep: not supported on this platform")); #endif return make_number(rc, result); |