xref: /openbsd/gnu/usr.bin/cvs/windows-NT/win32.c (revision d415bd75)
1 /*
2  * win32.c
3  * - utility functions for cvs under win32
4  *
5  */
6 
7 #include <ctype.h>
8 #include <stdio.h>
9 #include <conio.h>
10 
11 #define WIN32_LEAN_AND_MEAN
12 #include <windows.h>
13 
14 #include <config.h>
15 #include <winsock.h>
16 #include <stdlib.h>
17 
18 #include "cvs.h"
19 
20 void
21 init_winsock ()
22 {
23     WSADATA data;
24 
25     if (WSAStartup (MAKEWORD (1, 1), &data))
26     {
27 	fprintf (stderr, "cvs: unable to initialize winsock\n");
28 	exit (1);
29     }
30 }
31 
32 void
33 wnt_cleanup (void)
34 {
35     if (WSACleanup ())
36     {
37 #ifdef SERVER_ACTIVE
38 	if (server_active || error_use_protocol)
39 	    /* FIXME: how are we supposed to report errors?  As of now
40 	       (Sep 98), error() can in turn call us (if it is out of
41 	       memory) and in general is built on top of lots of
42 	       stuff.  */
43 	    ;
44 	else
45 #endif
46 	    fprintf (stderr, "cvs: cannot WSACleanup: %s\n",
47 		     sock_strerror (WSAGetLastError ()));
48     }
49 }
50 
51 unsigned sleep(unsigned seconds)
52 {
53 	Sleep(1000*seconds);
54 	return 0;
55 }
56 
57 /*
58  * Sleep at least useconds microseconds.
59  */
60 int usleep(unsigned long useconds)
61 {
62     /* Not very accurate, but it gets the job done */
63     Sleep(useconds/1000 + (useconds%1000 ? 1 : 0));
64     return 0;
65 }
66 
67 #if 0
68 
69 /* WinSock has a gethostname.  But note that WinSock gethostname may
70    want to talk to the network, which is kind of bogus in the
71    non-client/server case.  I'm not sure I can think of any obvious
72    solution.  Most of the ways I can think of to figure out whether
73    to call gethostname or GetComputerName seem kind of kludgey, and/or
74    might result in picking the name in a potentially confusing way
75    (I'm not sure exactly how the name(s) are set).  */
76 
77 int gethostname(char* name, int namelen)
78 {
79 	DWORD dw = namelen;
80 	BOOL ret = GetComputerName(name, &dw);
81 	namelen = dw;
82 	return (ret) ? 0 : -1;
83 }
84 #endif
85 
86 char *win32getlogin()
87 {
88     static char name[256];
89     DWORD dw = 256;
90     GetUserName (name, &dw);
91     if (name[0] == '\0')
92 	return NULL;
93     else
94 	return name;
95 }
96 
97 
98 pid_t
99 getpid ()
100 {
101     return (pid_t) GetCurrentProcessId();
102 }
103 
104 char *
105 getpass (const char *prompt)
106 {
107     static char pwd_buf[128];
108     size_t i;
109 
110     fputs (prompt, stderr);
111     fflush (stderr);
112     for (i = 0; i < sizeof (pwd_buf) - 1; ++i)
113     {
114 	pwd_buf[i] = _getch ();
115 	if (pwd_buf[i] == '\r')
116 	    break;
117     }
118     pwd_buf[i] = '\0';
119     fputs ("\n", stderr);
120     return pwd_buf;
121 }
122