diff options
author | Geoff Voelker <voelker@cs.washington.edu> | 1996-05-03 18:28:37 +0000 |
---|---|---|
committer | Geoff Voelker <voelker@cs.washington.edu> | 1996-05-03 18:28:37 +0000 |
commit | 476828a4d41c190bb0d836824d7b05c4cda1a696 (patch) | |
tree | 2077409e5c5501c72778265c0060372e5b02b44f /lib-src/ntlib.c | |
parent | e5d796d7be9614aa80fde566deffec9d700c076e (diff) | |
download | emacs-476828a4d41c190bb0d836824d7b05c4cda1a696.tar.gz |
Include ntlib.h.
(nt_sleep): Rename to sleep.
(getwd): Return directory.
(getlogin, cuserid, getuid, setuid, getpwuid, getpass, fchown,
sys_ctime, sys_fopen): New functions.
Diffstat (limited to 'lib-src/ntlib.c')
-rw-r--r-- | lib-src/ntlib.c | 123 |
1 files changed, 121 insertions, 2 deletions
diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c index dd294a5a149..5acc8363437 100644 --- a/lib-src/ntlib.c +++ b/lib-src/ntlib.c @@ -24,6 +24,10 @@ Boston, MA 02111-1307, USA. #include <windows.h> #include <stdlib.h> #include <stdio.h> +#include <time.h> +#include <direct.h> + +#include "ntlib.h" #define MAXPATHLEN _MAX_PATH @@ -31,7 +35,7 @@ Boston, MA 02111-1307, USA. would necessitate including windows.h in the files that used it. This is much easier. */ void -nt_sleep(int seconds) +sleep(int seconds) { Sleep (seconds * 1000); } @@ -40,7 +44,9 @@ nt_sleep(int seconds) int getwd (char *dir) { - return GetCurrentDirectory (MAXPATHLEN, dir); + if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) + return dir; + return NULL; } int @@ -95,3 +101,116 @@ getppid(void) exit (1); } } + +char * +getlogin () +{ + static char user_name[256]; + DWORD length = sizeof (user_name); + + if (GetUserName (user_name, &length)) + return user_name; + return NULL; +} + +char * +cuserid (char * s) +{ + char * name = getlogin (); + if (s) + return strcpy (s, name ? name : ""); + return name; +} + +int +getuid () +{ + return 0; +} + +int +setuid (int uid) +{ + return 0; +} + +struct passwd * +getpwuid (int uid) +{ + return NULL; +} + +char * +getpass (const char * prompt) +{ + static char input[256]; + HANDLE in; + HANDLE err; + DWORD count; + + in = GetStdHandle (STD_INPUT_HANDLE); + err = GetStdHandle (STD_ERROR_HANDLE); + + if (in == INVALID_HANDLE_VALUE || err == INVALID_HANDLE_VALUE) + return NULL; + + if (WriteFile (err, prompt, strlen (prompt), &count, NULL)) + { + int istty = (GetFileType (in) == FILE_TYPE_CHAR); + DWORD old_flags; + int rc; + + if (istty) + { + if (GetConsoleMode (in, &old_flags)) + SetConsoleMode (in, ENABLE_LINE_INPUT | ENABLE_PROCESSED_INPUT); + else + istty = 0; + } + rc = ReadFile (in, input, sizeof (input), &count, NULL); + if (count >= 2 && input[count - 2] == '\r') + input[count - 2] = '\0'; + else + { + char buf[256]; + while (ReadFile (in, buf, sizeof (buf), &count, NULL) > 0) + if (count >= 2 && buf[count - 2] == '\r') + break; + } + WriteFile (err, "\r\n", 2, &count, NULL); + if (istty) + SetConsoleMode (in, old_flags); + if (rc) + return input; + } + + return NULL; +} + +int +fchown (int fd, int uid, int gid) +{ + return 0; +} + +/* Place a wrapper around the MSVC version of ctime. It returns NULL + on network directories, so we handle that case here. + (Ulrich Leodolter, 1/11/95). */ +char * +sys_ctime (const time_t *t) +{ + char *str = (char *) ctime (t); + return (str ? str : "Sun Jan 01 00:00:00 1970"); +} + +FILE * +sys_fopen(const char * path, const char * mode) +{ + return fopen (path, mode); +} + +int +sys_chdir (const char * path) +{ + return _chdir (path); +} |