mirror of
git://sourceware.org/git/newlib-cygwin.git
synced 2025-01-22 15:07:43 +08:00
b1aae492d0
* Makefile.in (OBSOLETE_FUNCTIONS): Add open acl aclcheck aclfrommode aclfrompbits aclfromtext aclsort acltomode acltopbits acltotext chown facl fchown fgetpos fopen freopen fseeko fsetpos fstat ftello ftruncate getegid geteuid getgid getgrent getgrgid getgrnam getgroups getpwuid getpwuid_r getuid initgroups lchown lseek lstat mknod mmap seekdir setegid seteuid setgid setgroups setregid setreuid setuid stat telldir truncate. (NEW_FUNCTIONS): Add _open64 acl32 aclcheck32 aclfrommode32 aclfrompbits32 aclfromtext32 aclsort32 acltomode32 acltopbits32 acltotext32 chown32 facl32 fchown32 fgetpos64 fopen64 freopen64 fseeko64 fsetpos64 fstat64 ftello64 ftruncate64 getegid32 geteuid32 getgid32 getgrent32 getgrgid32 getgrnam32 getgroups32 getpwuid32 getpwuid_r32 getuid32 initgroups32 lchown32 lseek64 lstat64 mknod32 mmap64 seekdir64 setegid32 seteuid32 setgid32 setgroups32 setregid32 setreuid32 setuid32 stat64 telldir64 truncate64 to substitute the above. * cygserver_shm.h (class client_request_shm): Change uid_t and gid_t members to __uid32_t and __gid32_t. * cygwin.din: Add symbols acl32 aclcheck32 aclfrommode32 aclfrompbits32 aclfromtext32 aclsort32 acltomode32 acltopbits32 acltotext32 facl32 fgetpos64 fopen64 freopen64 fseeko64 fsetpos64 _fstat64 ftello64 _lseek64 mknod32 _open64. * glob.c: Include perprocess.h. (globtilde): Call getpwuid32 and getuid32 instead of getpwuid and getuid. (g_lstat): Check for applications API version to call the appropriate typed gl_lstat function. (g_stat): Ditto for gl_stat. * shm.cc (client_request_shm::client_request_shm): Call geteuid32 and getegid32 instead of geteuid and getegid throughout. * syscalls.cc (_open64): New alias for open. (_lseek64): New alias for lseek64. (_fstat64): New alias for fseek64. (mknod32): New function. (mknod): Calls mknod32 now. * winsup.h: Make function declarations for getuid32, geteuid32, and getpwuid32 accessible for plain C sources. Add declarations for getegid32 and getpwnam. * include/cygwin/version.h: Bum API minor number to 78. * include/sys/cygwin.h: Guard C++ specific members of struct per_process against inclusion in plain C sources. * include/sys/mman.h (mman): Add guard to avoid type clash when compiling Cygwin.
260 lines
7.9 KiB
C++
260 lines
7.9 KiB
C++
/* sys/cygwin.h
|
|
|
|
Copyright 1997, 1998, 2000, 2001, 2002 Red Hat, Inc.
|
|
|
|
This file is part of Cygwin.
|
|
|
|
This software is a copyrighted work licensed under the terms of the
|
|
Cygwin license. Please consult the file "CYGWIN_LICENSE" for
|
|
details. */
|
|
|
|
#ifndef _SYS_CYGWIN_H
|
|
#define _SYS_CYGWIN_H
|
|
|
|
#include <sys/types.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
extern pid_t cygwin32_winpid_to_pid (int);
|
|
extern void cygwin32_win32_to_posix_path_list (const char *, char *);
|
|
extern int cygwin32_win32_to_posix_path_list_buf_size (const char *);
|
|
extern void cygwin32_posix_to_win32_path_list (const char *, char *);
|
|
extern int cygwin32_posix_to_win32_path_list_buf_size (const char *);
|
|
extern int cygwin32_conv_to_win32_path (const char *, char *);
|
|
extern int cygwin32_conv_to_full_win32_path (const char *, char *);
|
|
extern void cygwin32_conv_to_posix_path (const char *, char *);
|
|
extern void cygwin32_conv_to_full_posix_path (const char *, char *);
|
|
extern int cygwin32_posix_path_list_p (const char *);
|
|
extern void cygwin32_split_path (const char *, char *, char *);
|
|
|
|
extern pid_t cygwin_winpid_to_pid (int);
|
|
extern int cygwin_win32_to_posix_path_list (const char *, char *);
|
|
extern int cygwin_win32_to_posix_path_list_buf_size (const char *);
|
|
extern int cygwin_posix_to_win32_path_list (const char *, char *);
|
|
extern int cygwin_posix_to_win32_path_list_buf_size (const char *);
|
|
extern int cygwin_conv_to_win32_path (const char *, char *);
|
|
extern int cygwin_conv_to_full_win32_path (const char *, char *);
|
|
extern int cygwin_conv_to_posix_path (const char *, char *);
|
|
extern int cygwin_conv_to_full_posix_path (const char *, char *);
|
|
extern int cygwin_posix_path_list_p (const char *);
|
|
extern void cygwin_split_path (const char *, char *, char *);
|
|
|
|
struct __cygwin_perfile
|
|
{
|
|
const char *name;
|
|
unsigned flags;
|
|
};
|
|
|
|
/* External interface stuff */
|
|
|
|
typedef enum
|
|
{
|
|
CW_LOCK_PINFO,
|
|
CW_UNLOCK_PINFO,
|
|
CW_GETTHREADNAME,
|
|
CW_GETPINFO,
|
|
CW_SETPINFO,
|
|
CW_SETTHREADNAME,
|
|
CW_GETVERSIONINFO,
|
|
CW_READ_V1_MOUNT_TABLES,
|
|
CW_USER_DATA,
|
|
CW_PERFILE,
|
|
CW_GET_CYGDRIVE_PREFIXES,
|
|
CW_GETPINFO_FULL,
|
|
CW_INIT_EXCEPTIONS,
|
|
CW_GET_CYGDRIVE_INFO,
|
|
CW_SET_CYGWIN_REGISTRY_NAME,
|
|
CW_GET_CYGWIN_REGISTRY_NAME,
|
|
CW_STRACE_TOGGLE,
|
|
CW_STRACE_ACTIVE,
|
|
CW_CYGWIN_PID_TO_WINPID,
|
|
CW_EXTRACT_DOMAIN_AND_USER,
|
|
CW_CMDLINE
|
|
} cygwin_getinfo_types;
|
|
|
|
#define CW_NEXTPID 0x80000000 /* or with pid to get next one */
|
|
|
|
/* Flags associated with process_state */
|
|
enum
|
|
{
|
|
PID_IN_USE = 0x0001, /* Entry in use. */
|
|
PID_ZOMBIE = 0x0002, /* Child exited: no parent wait. */
|
|
PID_STOPPED = 0x0004, /* Waiting for SIGCONT. */
|
|
PID_TTYIN = 0x0008, /* Waiting for terminal input. */
|
|
PID_TTYOU = 0x0010, /* Waiting for terminal output. */
|
|
PID_ORPHANED = 0x0020, /* Member of an orphaned process group. */
|
|
PID_ACTIVE = 0x0040, /* Pid accepts signals. */
|
|
PID_CYGPARENT = 0x0080, /* Set if parent was a cygwin app. */
|
|
PID_SPLIT_HEAP = 0x0100, /* Set if the heap has been split, */
|
|
/* which means we can't fork again. */
|
|
PID_MYSELF = 0x0200, /* Flag that pid is me. */
|
|
PID_UNUSED1 = 0x0400, /* Set if process uses Winsock. */
|
|
PID_INITIALIZING = 0x0800, /* Set until ready to receive signals. */
|
|
PID_USETTY = 0x1000, /* Setting this enables or disables cygwin's */
|
|
/* tty support. This is inherited by */
|
|
/* all execed or forked processes. */
|
|
PID_ALLPIDS = 0x2000, /* child has execed */
|
|
PID_EXECED = 0x4000, /* redirect to original pid info block */
|
|
PID_NOREDIR = 0x8000, /* don't redirect if execed */
|
|
PID_EXITED = 0x80000000 /* Free entry. */
|
|
};
|
|
|
|
#ifdef WINVER
|
|
#ifdef _PATH_PASSWD
|
|
extern HANDLE cygwin_logon_user (const struct passwd *, const char *);
|
|
#endif
|
|
|
|
/* This lives in the app and is initialized before jumping into the DLL.
|
|
It should only contain stuff which the user's process needs to see, or
|
|
which is needed before the user pointer is initialized, or is needed to
|
|
carry inheritance information from parent to child. Note that it cannot
|
|
be used to carry inheritance information across exec!
|
|
|
|
Remember, this structure is linked into the application's executable.
|
|
Changes to this can invalidate existing executables, so we go to extra
|
|
lengths to avoid having to do it.
|
|
|
|
When adding/deleting members, remember to adjust {public,internal}_reserved.
|
|
The size of the class shouldn't change [unless you really are prepared to
|
|
invalidate all existing executables]. The program does a check (using
|
|
SIZEOF_PER_PROCESS) to make sure you remember to make the adjustment.
|
|
*/
|
|
|
|
#ifdef __cplusplus
|
|
class ResourceLocks;
|
|
class MTinterface;
|
|
#endif
|
|
|
|
struct per_process
|
|
{
|
|
char *initial_sp;
|
|
|
|
/* The offset of these 3 values can never change. */
|
|
/* magic_biscuit is the size of this class and should never change. */
|
|
unsigned long magic_biscuit;
|
|
unsigned long dll_major;
|
|
unsigned long dll_minor;
|
|
|
|
struct _reent **impure_ptr_ptr;
|
|
char ***envptr;
|
|
|
|
/* Used to point to the memory machine we should use. Usually these
|
|
point back into the dll, but they can be overridden by the user. */
|
|
void *(*malloc)(size_t);
|
|
void (*free)(void *);
|
|
void *(*realloc)(void *, size_t);
|
|
|
|
int *fmode_ptr;
|
|
|
|
int (*main)(int, char **, char **);
|
|
void (**ctors)(void);
|
|
void (**dtors)(void);
|
|
|
|
/* For fork */
|
|
void *data_start;
|
|
void *data_end;
|
|
void *bss_start;
|
|
void *bss_end;
|
|
|
|
void *(*calloc)(size_t, size_t);
|
|
/* For future expansion of values set by the app. */
|
|
void (*premain[4]) (int, char **, struct per_process *);
|
|
|
|
/* The rest are *internal* to cygwin.dll.
|
|
Those that are here because we want the child to inherit the value from
|
|
the parent (which happens when bss is copied) are marked as such. */
|
|
|
|
/* non-zero of ctors have been run. Inherited from parent. */
|
|
int run_ctors_p;
|
|
|
|
DWORD unused[7];
|
|
|
|
/* Non-zero means the task was forked. The value is the pid.
|
|
Inherited from parent. */
|
|
int forkee;
|
|
|
|
HMODULE hmodule;
|
|
|
|
DWORD api_major; /* API version that this program was */
|
|
DWORD api_minor; /* linked with */
|
|
/* For future expansion, so apps won't have to be relinked if we
|
|
add an item. */
|
|
DWORD unused2[5];
|
|
|
|
#if defined (__INSIDE_CYGWIN__) && defined (__cplusplus)
|
|
ResourceLocks *resourcelocks;
|
|
MTinterface *threadinterface;
|
|
#else
|
|
void *resourcelocks;
|
|
void *threadinterface;
|
|
#endif
|
|
struct _reent *impure_ptr;
|
|
};
|
|
#define per_process_overwrite ((unsigned) &(((struct per_process *) NULL)->resourcelocks))
|
|
|
|
extern void cygwin_premain0 (int argc, char **argv, struct per_process *);
|
|
extern void cygwin_premain1 (int argc, char **argv, struct per_process *);
|
|
extern void cygwin_premain2 (int argc, char **argv, struct per_process *);
|
|
extern void cygwin_premain3 (int argc, char **argv, struct per_process *);
|
|
|
|
extern void cygwin_set_impersonation_token (const HANDLE);
|
|
|
|
/* included if <windows.h> is included */
|
|
extern int cygwin32_attach_handle_to_fd (char *, int, HANDLE, mode_t, DWORD);
|
|
extern int cygwin_attach_handle_to_fd (char *, int, HANDLE, mode_t, DWORD);
|
|
|
|
#include <sys/resource.h>
|
|
|
|
#define TTY_CONSOLE 0x40000000
|
|
|
|
#define EXTERNAL_PINFO_VERSION_16_BIT 0
|
|
#define EXTERNAL_PINFO_VERSION_32_BIT 1
|
|
#define EXTERNAL_PINFO_VERSION EXTERNAL_PINFO_VERSION_32_BIT
|
|
|
|
#ifndef _SYS_TYPES_H
|
|
typedef unsigned short __uid16_t;
|
|
typedef unsigned short __gid16_t;
|
|
typedef unsigned long __uid32_t;
|
|
typedef unsigned long __gid32_t;
|
|
#endif
|
|
|
|
struct external_pinfo
|
|
{
|
|
pid_t pid;
|
|
pid_t ppid;
|
|
HANDLE hProcess;
|
|
DWORD dwProcessId, dwSpawnedProcessId;
|
|
__uid16_t uid;
|
|
__gid16_t gid;
|
|
pid_t pgid;
|
|
pid_t sid;
|
|
int ctty;
|
|
mode_t umask;
|
|
|
|
long start_time;
|
|
struct rusage rusage_self;
|
|
struct rusage rusage_children;
|
|
|
|
char progname[MAX_PATH];
|
|
|
|
DWORD strace_mask;
|
|
DWORD version;
|
|
|
|
DWORD process_state;
|
|
|
|
/* Only available if version >= EXTERNAL_PINFO_VERSION_32_BIT */
|
|
__uid32_t uid32;
|
|
__gid32_t gid32;
|
|
};
|
|
|
|
DWORD cygwin_internal (cygwin_getinfo_types, ...);
|
|
#endif /*WINVER*/
|
|
|
|
#ifdef __cplusplus
|
|
};
|
|
#endif
|
|
|
|
#endif /* _SYS_CYGWIN_H */
|