aboutsummaryrefslogtreecommitdiff
path: root/include/mingw.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/mingw.h')
-rw-r--r--include/mingw.h671
1 files changed, 671 insertions, 0 deletions
diff --git a/include/mingw.h b/include/mingw.h
new file mode 100644
index 000000000..c41c0f91e
--- /dev/null
+++ b/include/mingw.h
@@ -0,0 +1,671 @@
1
2#define NOIMPL(name,...) static inline int name(__VA_ARGS__) { errno = ENOSYS; return -1; }
3#define IMPL(name,ret,retval,...) static inline ret name(__VA_ARGS__) { return retval; }
4
5/* Use 64-bit time on 32-bit platforms. */
6#if !defined(_WIN64)
7# define time_t __time64_t
8# define ctime(t) _ctime64(t)
9# define localtime(t) _localtime64(t)
10# define time(t) _time64(t)
11# define gmtime(t) _gmtime64(t)
12# define mktime(t) _mktime64(t)
13# define timespec _timespec64
14#endif
15
16/*
17 * sys/types.h
18 */
19typedef int gid_t;
20typedef int uid_t;
21
22#define DEFAULT_UID 4095
23#define DEFAULT_GID DEFAULT_UID
24
25/*
26 * arpa/inet.h
27 */
28static inline unsigned int git_ntohl(unsigned int x) { return (unsigned int)ntohl(x); }
29#define ntohl git_ntohl
30int inet_aton(const char *cp, struct in_addr *inp);
31int inet_pton(int af, const char *src, void *dst);
32
33/*
34 * fcntl.h
35 */
36#define F_DUPFD 0
37#define F_GETFD 1
38#define F_SETFD 2
39#define F_GETFL 3
40#define F_SETFL 3
41#define FD_CLOEXEC 0x1
42#define O_NONBLOCK 0
43#define O_NOFOLLOW 0
44#define O_NOCTTY 0
45#define O_DIRECT 0
46#define O_SPECIAL 0x800000
47
48#define AT_FDCWD -100
49#define AT_SYMLINK_NOFOLLOW 0x100
50
51/*
52 * grp.h
53 */
54
55struct group {
56 char *gr_name;
57 char *gr_passwd;
58 gid_t gr_gid;
59 char **gr_mem;
60};
61IMPL(getgrnam,struct group *,NULL,const char *name UNUSED_PARAM);
62struct group *getgrgid(gid_t gid);
63NOIMPL(initgroups,const char *group UNUSED_PARAM,gid_t gid UNUSED_PARAM);
64static inline void endgrent(void) {}
65int getgrouplist(const char *user, gid_t group, gid_t *groups, int *ngroups);
66
67/*
68 * limits.h
69 */
70#define NAME_MAX 255
71#define MAXSYMLINKS 20
72
73#ifdef LONG_MAX
74# if LONG_MAX == 2147483647
75# define LONG_BIT 32
76# else
77/* Safe assumption. */
78# define LONG_BIT 64
79# endif
80#elif defined __LONG_MAX__
81# if __LONG_MAX__ == 2147483647
82# define LONG_BIT 32
83# else
84/* Safe assumption. */
85# define LONG_BIT 64
86# endif
87#endif
88
89/*
90 * netdb.h
91 */
92
93typedef int sa_family_t;
94
95/*
96 * linux/un.h
97 */
98struct sockaddr_un {
99 sa_family_t sun_family;
100 char sun_path[1]; /* to make compiler happy, don't bother */
101};
102
103/*
104 * pwd.h
105 */
106struct passwd {
107 char *pw_name;
108 char *pw_passwd;
109 char *pw_gecos;
110 char *pw_dir;
111 char *pw_shell;
112 uid_t pw_uid;
113 gid_t pw_gid;
114};
115
116struct passwd *getpwnam(const char *name);
117struct passwd *getpwuid(uid_t uid);
118static inline void setpwent(void) {}
119static inline void endpwent(void) {}
120IMPL(getpwent_r,int,ENOENT,struct passwd *pwbuf UNUSED_PARAM,char *buf UNUSED_PARAM,size_t buflen UNUSED_PARAM,struct passwd **pwbufp UNUSED_PARAM);
121IMPL(getpwent,struct passwd *,NULL,void)
122
123/*
124 * signal.h
125 */
126#define SIGHUP 1
127#define SIGQUIT 3
128#define SIGKILL 9
129#define SIGPIPE 13
130
131#define SIG_UNBLOCK 1
132
133typedef void (*sighandler_t)(int);
134sighandler_t winansi_signal(int signum, sighandler_t handler);
135#define signal(s, h) winansi_signal(s, h)
136
137/*
138 * stdio.h
139 */
140#undef fseeko
141#define fseeko(f,o,w) fseek(f,o,w)
142
143int fdprintf(int fd, const char *format, ...);
144FILE* mingw_fopen(const char *filename, const char *mode);
145int mingw_rename(const char*, const char*);
146#define fopen mingw_fopen
147#define rename mingw_rename
148
149FILE *mingw_popen(const char *cmd, const char *mode);
150int mingw_popen_fd(const char *exe, const char *cmd, const char *mode,
151 int fd0, pid_t *pid);
152int mingw_pclose(FILE *fd);
153pid_t mingw_fork_compressor(int fd, const char *compressor, const char *mode);
154#undef popen
155#undef pclose
156#define popen mingw_popen
157#define pclose mingw_pclose
158
159IMPL(setlinebuf, void, ,FILE *fd UNUSED_PARAM)
160
161/*
162 * ANSI emulation wrappers
163 */
164
165BOOL conToCharBuffA(LPSTR d, DWORD len);
166BOOL conToCharA(LPSTR d);
167
168// same as ReadConsoleInputA, but delivers UTF8 regardless of console CP
169BOOL readConsoleInput_utf8(HANDLE h, INPUT_RECORD *r, DWORD len, DWORD *got);
170
171void set_title(const char *str);
172int get_title(char *buf, int len);
173void move_cursor_row(int n);
174void reset_screen(void);
175int winansi_putchar(int c);
176int winansi_puts(const char *s);
177size_t winansi_fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
178int winansi_fputs(const char *str, FILE *stream);
179int winansi_fputc(int c, FILE *stream);
180int winansi_vsnprintf(char *buf, size_t size, const char *format, va_list list);
181int winansi_vfprintf(FILE *stream, const char *format, va_list list);
182int winansi_printf(const char *format, ...) __attribute__((format (printf, 1, 2)));
183int winansi_fprintf(FILE *stream, const char *format, ...) __attribute__((format (printf, 2, 3)));
184int winansi_write(int fd, const void *buf, size_t count);
185int winansi_read(int fd, void *buf, size_t count);
186size_t winansi_fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
187int winansi_getc(FILE *stream);
188int winansi_getchar(void);
189char *winansi_fgets(char *s, int size, FILE *stream);
190void console_write(const char *str, int len);
191
192#define putchar winansi_putchar
193#define puts winansi_puts
194#define fwrite winansi_fwrite
195#define fputs winansi_fputs
196#define fputc winansi_fputc
197#if !defined(__USE_MINGW_ANSI_STDIO) || !__USE_MINGW_ANSI_STDIO
198#define vsnprintf(buf, size, ...) winansi_vsnprintf(buf, size, __VA_ARGS__)
199#endif
200#define vfprintf(stream, ...) winansi_vfprintf(stream, __VA_ARGS__)
201#define vprintf(...) winansi_vfprintf(stdout, __VA_ARGS__)
202#define printf(...) winansi_printf(__VA_ARGS__)
203#define fprintf(...) winansi_fprintf(__VA_ARGS__)
204#define write winansi_write
205#define read winansi_read
206#define fread winansi_fread
207#define getc winansi_getc
208#define fgetc winansi_getc
209#define getchar winansi_getchar
210#define fgets winansi_fgets
211
212/*
213 * stdlib.h
214 */
215#define WTERMSIG(x) ((x) & 0x7f)
216#define WIFEXITED(x) (WTERMSIG(x) == 0)
217#define WEXITSTATUS(x) (((x) & 0xff00) >> 8)
218#define WIFSIGNALED(x) (((signed char) (((x) & 0x7f) + 1) >> 1) > 0)
219#define WCOREDUMP(x) 0
220#define WIFSTOPPED(x) 0
221
222int mingw_system(const char *cmd);
223#define system mingw_system
224
225int clearenv(void);
226char *mingw_getenv(const char *name);
227int mingw_putenv(const char *env);
228char *mingw_mktemp(char *template);
229int mkstemp(char *template);
230char *realpath(const char *path, char *resolved_path);
231int setenv(const char *name, const char *value, int replace);
232int unsetenv(const char *env);
233
234#define getenv mingw_getenv
235#define putenv mingw_putenv
236#define mktemp mingw_mktemp
237
238/*
239 * string.h
240 */
241char *strndup(char const *s, size_t n);
242char *mingw_strerror(int errnum);
243char *strsignal(int sig);
244int strverscmp(const char *s1, const char *s2);
245
246#define strerror mingw_strerror
247
248/*
249 * strings.h
250 */
251#if !defined(__GNUC__)
252int ffs(int i);
253#else
254# define ffs(i) __builtin_ffs(i)
255#endif
256
257/*
258 * sys/ioctl.h
259 */
260
261#define TIOCGWINSZ 0x5413
262
263int ioctl(int fd, int code, ...);
264
265/*
266 * sys/socket.h
267 */
268#define hstrerror strerror
269
270#define SHUT_WR SD_SEND
271
272int mingw_socket(int domain, int type, int protocol);
273int mingw_connect(int sockfd, const struct sockaddr *sa, size_t sz);
274int mingw_bind(int sockfd, struct sockaddr *sa, size_t sz);
275int mingw_setsockopt(int sockfd, int lvl, int optname, void *optval, int optlen);
276int mingw_shutdown(int sockfd, int how);
277int mingw_listen(int sockfd, int backlog);
278int mingw_accept(int sockfd1, struct sockaddr *sa, socklen_t *sz);
279int mingw_select (int nfds, fd_set *rfds, fd_set *wfds, fd_set *xfds,
280 struct timeval *timeout);
281int mingw_getpeername(int fd, struct sockaddr *sa, socklen_t *sz);
282int mingw_gethostname(char *host, int namelen);
283int mingw_getaddrinfo(const char *node, const char *service,
284 const struct addrinfo *hints, struct addrinfo **res);
285struct hostent *mingw_gethostbyaddr(const void *addr, socklen_t len, int type);
286
287#define socket mingw_socket
288#define connect mingw_connect
289#define listen mingw_listen
290#define bind mingw_bind
291#define setsockopt mingw_setsockopt
292#define shutdown mingw_shutdown
293#define accept mingw_accept
294#define select mingw_select
295#define getpeername mingw_getpeername
296#define gethostname mingw_gethostname
297#define getaddrinfo mingw_getaddrinfo
298#define gethostbyaddr mingw_gethostbyaddr
299
300/*
301 * sys/time.h
302 */
303#ifndef _TIMESPEC_DEFINED
304#define _TIMESPEC_DEFINED
305struct timespec {
306 time_t tv_sec;
307 long int tv_nsec;
308};
309#endif
310
311typedef int clockid_t;
312#define CLOCK_REALTIME 0
313
314time_t timegm(struct tm *tm);
315
316int nanosleep(const struct timespec *req, struct timespec *rem);
317int clock_gettime(clockid_t clockid, struct timespec *tp);
318int clock_settime(clockid_t clockid, const struct timespec *tp);
319
320/*
321 * sys/stat.h
322 */
323#define S_ISUID 04000
324#define S_ISGID 02000
325#define S_ISVTX 01000
326#ifndef S_IRWXU
327#define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR)
328#endif
329#define S_IRWXG (S_IRWXU >> 3)
330#define S_IRWXO (S_IRWXG >> 3)
331
332#define S_IFSOCK 0140000
333#define S_IFLNK 0120000 /* Symbolic link */
334#define S_ISLNK(x) (((x) & S_IFMT) == S_IFLNK)
335#define S_ISSOCK(x) 0
336
337#define S_IRGRP (S_IRUSR >> 3)
338#define S_IWGRP (S_IWUSR >> 3)
339#define S_IXGRP (S_IXUSR >> 3)
340#define S_IROTH (S_IRGRP >> 3)
341#define S_IWOTH (S_IWGRP >> 3)
342#define S_IXOTH (S_IXGRP >> 3)
343
344mode_t mingw_umask(mode_t mode);
345#define umask mingw_umask
346
347#define DEFAULT_UMASK 0002
348
349IMPL(fchmod,int,0,int fildes UNUSED_PARAM, mode_t mode UNUSED_PARAM);
350NOIMPL(fchown,int fd UNUSED_PARAM, uid_t uid UNUSED_PARAM, gid_t gid UNUSED_PARAM);
351int mingw_mkdir(const char *path, int mode);
352int mingw_chdir(const char *path);
353int mingw_chmod(const char *path, int mode);
354
355#define mkdir mingw_mkdir
356#define chdir mingw_chdir
357#define chmod mingw_chmod
358
359#if ENABLE_LFS && !defined(__MINGW64_VERSION_MAJOR)
360# define off_t off64_t
361#endif
362
363typedef int nlink_t;
364typedef int blksize_t;
365typedef off_t blkcnt_t;
366#if ENABLE_FEATURE_EXTRA_FILE_DATA
367#define ino_t uint64_t
368#endif
369
370struct mingw_stat {
371 dev_t st_dev;
372 ino_t st_ino;
373 mode_t st_mode;
374 nlink_t st_nlink;
375 uid_t st_uid;
376 gid_t st_gid;
377 dev_t st_rdev;
378 off_t st_size;
379 struct timespec st_atim;
380 struct timespec st_mtim;
381 struct timespec st_ctim;
382 blksize_t st_blksize;
383 blkcnt_t st_blocks;
384 DWORD st_attr;
385 DWORD st_tag;
386};
387#define st_atime st_atim.tv_sec
388#define st_mtime st_mtim.tv_sec
389#define st_ctime st_ctim.tv_sec
390
391int count_subdirs(const char *pathname);
392int mingw_lstat(const char *file_name, struct mingw_stat *buf);
393int mingw_stat(const char *file_name, struct mingw_stat *buf);
394int mingw_fstat(int fd, struct mingw_stat *buf);
395#undef lstat
396#undef stat
397#undef fstat
398#define lstat mingw_lstat
399#define stat mingw_stat
400#define fstat mingw_fstat
401
402#define UTIME_NOW ((1l << 30) - 1l)
403#define UTIME_OMIT ((1l << 30) - 2l)
404
405int utimensat(int fd, const char *path, const struct timespec times[2],
406 int flags);
407int futimens(int fd, const struct timespec times[2]);
408
409/*
410 * sys/sysinfo.h
411 */
412struct sysinfo {
413 long uptime; /* Seconds since boot */
414 unsigned long loads[3]; /* 1, 5, and 15 minute load averages */
415 unsigned long totalram; /* Total usable main memory size */
416 unsigned long freeram; /* Available memory size */
417 unsigned long sharedram; /* Amount of shared memory */
418 unsigned long bufferram; /* Memory used by buffers */
419 unsigned long totalswap; /* Total swap space size */
420 unsigned long freeswap; /* Swap space still available */
421 unsigned short procs; /* Number of current processes */
422 unsigned long totalhigh; /* Total high memory size */
423 unsigned long freehigh; /* Available high memory size */
424 unsigned int mem_unit; /* Memory unit size in bytes */
425};
426
427int sysinfo(struct sysinfo *info);
428
429/*
430 * sys/sysmacros.h
431 */
432#define makedev(a,b) 0*(a)*(b) /* avoid unused warning */
433#define minor(x) 0
434#define major(x) 0
435
436/*
437 * sys/wait.h
438 */
439#define WNOHANG 1
440#define WUNTRACED 2
441pid_t waitpid(pid_t pid, int *status, int options);
442pid_t mingw_wait3(pid_t pid, int *status, int options, struct rusage *rusage);
443
444/*
445 * time.h
446 */
447struct tm *gmtime_r(const time_t *timep, struct tm *result);
448struct tm *localtime_r(const time_t *timep, struct tm *result);
449char *strptime(const char *s, const char *format, struct tm *tm);
450char *mingw_strptime(const char *s, const char *format, struct tm *tm, long *gmt);
451size_t mingw_strftime(char *buf, size_t max, const char *format, const struct tm *tm);
452
453#define strftime mingw_strftime
454
455/*
456 * times.h
457 */
458#define clock_t long
459
460struct tms {
461 clock_t tms_utime; /* user CPU time */
462 clock_t tms_stime; /* system CPU time */
463 clock_t tms_cutime; /* user CPU time of children */
464 clock_t tms_cstime; /* system CPU time of children */
465};
466
467clock_t times(struct tms *buf);
468
469/*
470 * unistd.h
471 */
472#define PIPE_BUF 8192
473
474#define _SC_CLK_TCK 2
475
476#define TICKS_PER_SECOND 100
477#define MS_PER_TICK 10
478#define HNSEC_PER_TICK 100000
479
480IMPL(alarm,unsigned int,0,unsigned int seconds UNUSED_PARAM);
481IMPL(chown,int,0,const char *path UNUSED_PARAM, uid_t uid UNUSED_PARAM, gid_t gid UNUSED_PARAM);
482NOIMPL(chroot,const char *root UNUSED_PARAM);
483NOIMPL(fchdir,int fd UNUSED_PARAM);
484int mingw_dup2 (int fd, int fdto);
485char *mingw_getcwd(char *pointer, int len);
486off_t mingw_lseek(int fd, off_t offset, int whence);
487
488
489int getuid(void);
490#define getgid getuid
491#define geteuid getuid
492#define getegid getuid
493int getgroups(int n, gid_t *groups);
494pid_t getppid(void);
495NOIMPL(getsid,pid_t pid UNUSED_PARAM);
496int getlogin_r(char *buf, size_t len);
497int fcntl(int fd, int cmd, ...);
498int fsync(int fd);
499int kill(pid_t pid, int sig);
500int link(const char *oldpath, const char *newpath);
501NOIMPL(mknod,const char *name UNUSED_PARAM, mode_t mode UNUSED_PARAM, dev_t device UNUSED_PARAM);
502/* order of devices must match that in get_dev_type */
503enum {DEV_NULL, DEV_ZERO, DEV_URANDOM, NOT_DEVICE = -1};
504int get_dev_type(const char *filename);
505void update_special_fd(int dev, int fd);
506int mingw_open (const char *filename, int oflags, ...);
507
508/* functions which add O_SPECIAL to open(2) to allow access to devices */
509int mingw_xopen(const char *filename, int oflags);
510ssize_t mingw_open_read_close(const char *fn, void *buf, size_t size) FAST_FUNC;
511
512#ifndef IO_REPARSE_TAG_APPEXECLINK
513# define IO_REPARSE_TAG_APPEXECLINK 0x8000001b
514#endif
515
516ssize_t mingw_read(int fd, void *buf, size_t count);
517int mingw_close(int fd);
518int pipe(int filedes[2]);
519NOIMPL(setgid,gid_t gid UNUSED_PARAM);
520NOIMPL(setegid,gid_t gid UNUSED_PARAM);
521NOIMPL(setsid,void);
522NOIMPL(setuid,uid_t gid UNUSED_PARAM);
523NOIMPL(seteuid,uid_t gid UNUSED_PARAM);
524unsigned int sleep(unsigned int seconds);
525int symlink(const char *target, const char *linkpath);
526int create_junction(const char *oldpath, const char *newpath);
527long sysconf(int name);
528IMPL(getpagesize,int,4096,void);
529NOIMPL(ttyname_r,int fd UNUSED_PARAM, char *buf UNUSED_PARAM, int sz UNUSED_PARAM);
530int mingw_unlink(const char *pathname);
531int mingw_access(const char *name, int mode);
532int mingw_rmdir(const char *name);
533void mingw_sync(void);
534int mingw_isatty(int fd);
535
536#define dup2 mingw_dup2
537#define getcwd mingw_getcwd
538#define lchown chown
539#define open mingw_open
540#define close mingw_close
541#define unlink mingw_unlink
542#define rmdir mingw_rmdir
543#define sync mingw_sync
544#undef lseek
545#define lseek mingw_lseek
546
547#undef access
548#define access mingw_access
549#define isatty mingw_isatty
550
551/*
552 * utime.h
553 */
554int utimes(const char *file_name, const struct timeval times[2]);
555
556/*
557 * Functions with different prototypes in BusyBox and WIN32
558 */
559#define itoa bb_itoa
560#define strrev bb_strrev
561
562/*
563 * MinGW specific
564 */
565#define is_dir_sep(c) ((c) == '/' || (c) == '\\')
566#define is_unc_path(x) (strlen(x) > 4 && is_dir_sep(x[0]) && \
567 is_dir_sep(x[1]) && !is_dir_sep(x[2]))
568
569typedef struct {
570 char *path;
571 char *name;
572 char *opts;
573 char buf[100];
574} interp_t;
575
576int FAST_FUNC parse_interpreter(const char *cmd, interp_t *interp);
577char ** FAST_FUNC grow_argv(char **argv, int n);
578pid_t FAST_FUNC mingw_spawn(char **argv);
579intptr_t FAST_FUNC mingw_spawn_detach(char **argv);
580intptr_t FAST_FUNC mingw_spawn_proc(const char **argv);
581int mingw_execv(const char *cmd, char *const *argv);
582int httpd_execv_detach(const char *cmd, char *const *argv);
583int mingw_execvp(const char *cmd, char *const *argv);
584int mingw_execve(const char *cmd, char *const *argv, char *const *envp);
585#define spawn mingw_spawn
586#define execvp mingw_execvp
587#define execve mingw_execve
588#define execv mingw_execv
589#define HTTPD_DETACH (8)
590
591#define has_dos_drive_prefix(path) (isalpha(*(path)) && (path)[1] == ':')
592
593BOOL WINAPI kill_child_ctrl_handler(DWORD dwCtrlType);
594int FAST_FUNC is_valid_signal(int number);
595int exit_code_to_wait_status(DWORD win_exit_code);
596int exit_code_to_posix(DWORD win_exit_code);
597
598#define find_mount_point(n, s) find_mount_point(n)
599
600char *is_prefixed_with_case(const char *string, const char *key) FAST_FUNC;
601char *is_suffixed_with_case(const char *string, const char *key) FAST_FUNC;
602
603#define VT_OUTPUT 1
604#define VT_INPUT 2
605
606/*
607 * helpers
608 */
609
610const char *get_busybox_exec_path(void);
611void init_winsock(void);
612
613int has_bat_suffix(const char *p);
614int has_exe_suffix(const char *p);
615int has_exe_suffix_or_dot(const char *name);
616char *alloc_ext_space(const char *path);
617int add_win32_extension(char *p);
618char *file_is_win32_exe(const char *name);
619
620#if ENABLE_UNICODE_SUPPORT
621/*
622 * windows wchar_t is 16 bit, while linux (and busybox expectation) is 32.
623 * so when (busybox) unicode.h is included, wchar_t is 32 bit.
624 * Without unicode.h, MINGW_BB_WCHAR_T is busybox wide char (32),
625 * and wchar_t is Windows wide char (16).
626 */
627#define MINGW_BB_WCHAR_T uint32_t /* keep in sync with unicode.h */
628
629MINGW_BB_WCHAR_T *bs_to_slash_u(MINGW_BB_WCHAR_T *p) FAST_FUNC;
630#endif
631
632char *bs_to_slash(char *p) FAST_FUNC;
633void slash_to_bs(char *p) FAST_FUNC;
634void strip_dot_space(char *p) FAST_FUNC;
635size_t remove_cr(char *p, size_t len) FAST_FUNC;
636
637int err_win_to_posix(void);
638
639ULONGLONG CompatGetTickCount64(void);
640#define GetTickCount64 CompatGetTickCount64
641
642ssize_t get_random_bytes(void *buf, ssize_t count);
643int enumerate_links(const char *file, char *name);
644
645int unc_root_len(const char *dir) FAST_FUNC;
646int root_len(const char *path) FAST_FUNC;
647const char *get_system_drive(void) FAST_FUNC;
648int chdir_system_drive(void);
649char *xabsolute_path(char *path) FAST_FUNC;
650char *get_drive_cwd(const char *path, char *buffer, int size) FAST_FUNC;
651void fix_path_case(char *path) FAST_FUNC;
652void make_sparse(int fd, off_t start, off_t end) FAST_FUNC;
653int terminal_mode(int reset) FAST_FUNC;
654int unix_path(const char *path) FAST_FUNC;
655int has_path(const char *file) FAST_FUNC;
656int is_relative_path(const char *path) FAST_FUNC;
657char *get_last_slash(const char *path) FAST_FUNC;
658const char *applet_to_exe(const char *name) FAST_FUNC;
659char *get_user_name(void);
660char *quote_arg(const char *arg) FAST_FUNC;
661char *find_first_executable(const char *name) FAST_FUNC;
662char *xappendword(const char *str, const char *word) FAST_FUNC;
663int windows_env(void);
664void change_critical_error_dialogs(const char *newval) FAST_FUNC;
665char *exe_relative_path(const char *tail) FAST_FUNC;
666enum {
667 ELEVATED_PRIVILEGE = 1,
668 ADMIN_ENABLED = 2
669};
670int elevation_state(void);
671void set_interp(int i) FAST_FUNC;