diff options
Diffstat (limited to 'bdb/build_win32/dbkill.cpp')
-rw-r--r-- | bdb/build_win32/dbkill.cpp | 131 |
1 files changed, 0 insertions, 131 deletions
diff --git a/bdb/build_win32/dbkill.cpp b/bdb/build_win32/dbkill.cpp deleted file mode 100644 index 23dc87b0e85..00000000000 --- a/bdb/build_win32/dbkill.cpp +++ /dev/null @@ -1,131 +0,0 @@ -/*- - * See the file LICENSE for redistribution information. - * - * Copyright (c) 1999-2002 - * Sleepycat Software. All rights reserved. - * - * $Id: dbkill.cpp,v 11.7 2002/01/11 15:51:27 bostic Exp $ - */ -/* - * Kill - - * Simulate Unix kill on Windows/NT and Windows/9X. - * This good enough to support the Berkeley DB test suite, - * but may be missing some favorite features. - * - * Would have used MKS kill, but it didn't seem to work well - * on Win/9X. Cygnus kill works within the Gnu/Cygnus environment - * (where processes are given small pids, with presumably a translation - * table between small pids and actual process handles), but our test - * environment, via Tcl, does not use the Cygnus environment. - * - * Compile this and install it as c:/tools/kill.exe (or as indicated - * by build_win32/include.tcl ). - */ - -#include <windows.h> -#include <stdio.h> -#include <stdlib.h> -#include <limits.h> - -/* - * Like atol, with specified base. Would use stdlib, but - * strtol("0xFFFF1234", NULL, 16) returns 0x7FFFFFFF and - * strtol("4294712487", NULL, 16) returns 0x7FFFFFFF w/ VC++ - */ -long -myatol(char *s, int base) -{ - long result = 0; - char ch; - int sign = 1; /* + */ - if (base == 0) - base = 10; - if (base != 10 && base != 16) - return LONG_MAX; - while ((ch = *s++) != '\0') { - if (ch == '-') { - sign = -sign; - } - else if (ch >= '0' && ch <= '9') { - result = result * base + (ch - '0'); - } - else if (ch == 'x' || ch == 'X') { - /* Allow leading 0x..., and switch to base 16 */ - base = 16; - } - else if (base == 16 && ch >= 'a' && ch <= 'f') { - result = result * base + (ch - 'a' + 10); - } - else if (base == 16 && ch >= 'A' && ch <= 'F') { - result = result * base + (ch - 'A' + 10); - } - else { - if (sign > 1) - return LONG_MAX; - else - return LONG_MIN; - } - } - return sign * result; -} - -void -usage_exit() -{ - fprintf(stderr, "Usage: kill [ -sig ] pid\n"); - fprintf(stderr, " for win32, sig must be or 0, 15 (TERM)\n"); - exit(EXIT_FAILURE); -} - -int -main(int argc, char **argv) -{ - HANDLE hProcess ; - DWORD accessflag; - long pid; - int sig = 15; - - if (argc > 2) { - if (argv[1][0] != '-') - usage_exit(); - - if (strcmp(argv[1], "-TERM") == 0) - sig = 15; - else { - /* currently sig is more or less ignored, - * we only care if it is zero or not - */ - sig = atoi(&argv[1][1]); - if (sig < 0) - usage_exit(); - } - argc--; - argv++; - } - if (argc < 2) - usage_exit(); - - pid = myatol(argv[1], 10); - /*printf("pid = %ld (0x%lx) (command line %s)\n", pid, pid, argv[1]);*/ - if (pid == LONG_MAX || pid == LONG_MIN) - usage_exit(); - - if (sig == 0) - accessflag = PROCESS_QUERY_INFORMATION | PROCESS_VM_READ; - else - accessflag = STANDARD_RIGHTS_REQUIRED | PROCESS_TERMINATE; - hProcess = OpenProcess(accessflag, FALSE, pid); - if (hProcess == NULL) { - fprintf(stderr, "dbkill: %s: no such process\n", argv[1]); - exit(EXIT_FAILURE); - } - if (sig == 0) - exit(EXIT_SUCCESS); - if (!TerminateProcess(hProcess, 99)) { - DWORD err = GetLastError(); - fprintf(stderr, - "dbkill: cannot kill process: error %d (0x%lx)\n", err, err); - exit(EXIT_FAILURE); - } - return EXIT_SUCCESS; -} |