Mercurial > emacs
comparison lib-src/ntlib.c @ 9803:fa698fd10c05
Initial revision
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 01 Nov 1994 10:27:02 +0000 |
parents | |
children | ee40177f6c68 |
comparison
equal
deleted
inserted
replaced
9802:77c448147423 | 9803:fa698fd10c05 |
---|---|
1 /* Utility and Unix shadow routines for GNU Emacs support programs on NT. | |
2 Copyright (C) 1994 Free Software Foundation, Inc. | |
3 | |
4 This file is part of GNU Emacs. | |
5 | |
6 GNU Emacs is free software; you can redistribute it and/or modify it | |
7 under the terms of the GNU General Public License as published by the | |
8 Free Software Foundation; either version 2, or (at your option) any later | |
9 version. | |
10 | |
11 GNU Emacs is distributed in the hope that it will be useful, but WITHOUT | |
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for | |
14 more details. | |
15 | |
16 You should have received a copy of the GNU General Public License along | |
17 with GNU Emacs; see the file COPYING. If not, write to the Free Software | |
18 Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. | |
19 | |
20 Geoff Voelker (voelker@cs.washington.edu) 10-8-94 | |
21 */ | |
22 | |
23 #include <windows.h> | |
24 #include <stdlib.h> | |
25 #include <stdio.h> | |
26 | |
27 #define MAXPATHLEN _MAX_PATH | |
28 | |
29 /* Emulate sleep...we could have done this with a define, but that | |
30 would necessitate including windows.h in the files that used it. | |
31 This is much easier. */ | |
32 void | |
33 nt_sleep(int seconds) | |
34 { | |
35 Sleep (seconds * 1000); | |
36 } | |
37 | |
38 /* Get the current working directory. */ | |
39 int | |
40 getwd (char *dir) | |
41 { | |
42 return GetCurrentDirectory (MAXPATHLEN, dir); | |
43 } | |
44 | |
45 static HANDLE getppid_parent; | |
46 static int getppid_ppid; | |
47 | |
48 int | |
49 getppid(void) | |
50 { | |
51 char *ppid; | |
52 DWORD result; | |
53 | |
54 ppid = getenv ("__PARENT_PROCESS_ID"); | |
55 if (!ppid) | |
56 { | |
57 printf("no pid.\n"); | |
58 return 0; | |
59 } | |
60 else | |
61 { | |
62 getppid_ppid = atoi (ppid); | |
63 } | |
64 | |
65 if (!getppid_parent) | |
66 { | |
67 getppid_parent = OpenProcess (SYNCHRONIZE, FALSE, atoi(ppid)); | |
68 if (!getppid_parent) | |
69 { | |
70 printf ("Failed to open handle to parent process: %d\n", | |
71 GetLastError()); | |
72 exit (1); | |
73 } | |
74 } | |
75 | |
76 result = WaitForSingleObject (getppid_parent, 0); | |
77 switch (result) | |
78 { | |
79 case WAIT_TIMEOUT: | |
80 /* The parent is still alive. */ | |
81 return getppid_ppid; | |
82 case WAIT_OBJECT_0: | |
83 /* The parent is gone. Return the pid of Unix init (1). */ | |
84 return 1; | |
85 case WAIT_FAILED: | |
86 default: | |
87 printf ("Checking parent status failed: %d\n", GetLastError()); | |
88 exit (1); | |
89 } | |
90 } |