X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/bcfe87c45142a10582a17744b29c30723c029a6a..95555145149ca1758e9b9e50d769685ece740134:/lib-src/ntlib.c diff --git a/lib-src/ntlib.c b/lib-src/ntlib.c index dd294a5a14..94110e4306 100644 --- a/lib-src/ntlib.c +++ b/lib-src/ntlib.c @@ -1,5 +1,6 @@ /* Utility and Unix shadow routines for GNU Emacs support programs on NT. - Copyright (C) 1994 Free Software Foundation, Inc. + Copyright (C) 1994, 2002, 2003, 2004, 2005, + 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -15,8 +16,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -Boston, MA 02111-1307, USA. +the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +Boston, MA 02110-1301, USA. Geoff Voelker (voelker@cs.washington.edu) 10-8-94 */ @@ -24,6 +25,10 @@ Boston, MA 02111-1307, USA. #include #include #include +#include +#include + +#include "ntlib.h" #define MAXPATHLEN _MAX_PATH @@ -31,22 +36,18 @@ 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(unsigned long seconds) { Sleep (seconds * 1000); } /* Get the current working directory. */ -int +char * getwd (char *dir) { - return GetCurrentDirectory (MAXPATHLEN, dir); -} - -int -getpid () -{ - return _getpid (); + if (GetCurrentDirectory (MAXPATHLEN, dir) > 0) + return dir; + return NULL; } static HANDLE getppid_parent; @@ -58,21 +59,21 @@ getppid(void) char *ppid; DWORD result; - ppid = getenv ("__PARENT_PROCESS_ID"); - if (!ppid) + ppid = getenv ("EM_PARENT_PROCESS_ID"); + if (!ppid) { printf("no pid.\n"); return 0; - } - else + } + else { getppid_ppid = atoi (ppid); } - if (!getppid_parent) + if (!getppid_parent) { getppid_parent = OpenProcess (SYNCHRONIZE, FALSE, atoi(ppid)); - if (!getppid_parent) + if (!getppid_parent) { printf ("Failed to open handle to parent process: %d\n", GetLastError()); @@ -81,7 +82,7 @@ getppid(void) } result = WaitForSingleObject (getppid_parent, 0); - switch (result) + switch (result) { case WAIT_TIMEOUT: /* The parent is still alive. */ @@ -95,3 +96,119 @@ 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); +} + +/* arch-tag: 7b63fb83-70ee-4124-8822-54e53e5d0773 + (do not change this comment) */