]>
sourceware.org Git - newlib-cygwin.git/blob - winsup/cygwin/cygheap.h
1 /* cygheap.h: Cygwin heap manager.
3 Copyright 2000 Cygnus Solutions.
5 This file is part of Cygwin.
7 This software is a copyrighted work licensed under the terms of the
8 Cygwin license. Please consult the file "CYGWIN_LICENSE" for
28 #define incygheap(s) (cygheap && ((char *) (s) >= (char *) cygheap) && ((char *) (s) <= ((char *) cygheap_max)))
37 struct _cmalloc_entry
*prev
;
41 struct cygheap_root_mount_info
43 char posix_path
[MAX_PATH
];
44 unsigned posix_pathlen
;
45 char native_path
[MAX_PATH
];
46 unsigned native_pathlen
;
51 /* Root directory information.
52 This is used after a chroot is called. */
53 struct cygheap_root_mount_info
*m
;
56 bool posix_ok (const char *path
)
58 extern int path_prefix_p (const char *, const char *, int);
61 return path_prefix_p (m
->posix_path
, path
, m
->posix_pathlen
);
63 bool ischroot_native (const char *path
)
67 return strncasematch (m
->native_path
, path
, m
->native_pathlen
)
68 && (path
[m
->native_pathlen
] == '\\' || !path
[m
->native_pathlen
]);
71 const char *unchroot (const char *path
)
75 const char *p
= path
+ m
->posix_pathlen
;
80 bool exists () {return !!m
;}
81 void set (const char *posix
, const char *native
);
82 size_t posix_length () const { return m
->posix_pathlen
; }
83 const char *posix_path () const { return m
->posix_path
; }
84 size_t native_length () const { return m
->native_pathlen
; }
85 const char *native_path () const { return m
->native_path
; }
90 /* Extendend user information.
91 The information is derived from the internal_getlogin call
92 when on a NT system. */
93 char *pname
; /* user's name */
94 char *plogsrv
; /* Logon server, may be FQDN */
95 char *pdomain
; /* Logon domain of the user */
96 PSID psid
; /* buffer for user's SID */
98 uid_t orig_uid
; /* Remains intact even after impersonation */
99 uid_t orig_gid
; /* Ditto */
100 uid_t real_uid
; /* Remains intact on seteuid, replaced by setuid */
101 gid_t real_gid
; /* Ditto */
103 /* token is needed if set(e)uid should be called. It can be set by a call
104 to `set_impersonation_token()'. */
108 cygheap_user () : pname (NULL
), plogsrv (NULL
), pdomain (NULL
), psid (NULL
) {}
111 void set_name (const char *new_name
);
112 const char *name () const { return pname
; }
114 void set_logsrv (const char *new_logsrv
);
115 const char *logsrv () const { return plogsrv
; }
117 void set_domain (const char *new_domain
);
118 const char *domain () const { return pdomain
; }
120 BOOL
set_sid (PSID new_sid
);
121 PSID
sid () const { return psid
; }
123 void operator =(cygheap_user
&user
)
125 set_name (user
.name ());
126 set_logsrv (user
.logsrv ());
127 set_domain (user
.domain ());
128 set_sid (user
.sid ());
132 /* cwd cache stuff. */
142 char *get (char *buf
, int need_posix
= 1, int with_chroot
= 0, unsigned ulen
= MAX_PATH
);
145 void fixup_after_exec (char *win32
, char *posix
, DWORD hash
);
147 void set (const char *win32_cwd
, const char *posix_cwd
= NULL
);
152 _cmalloc_entry
*chain
;
162 #define CYGHEAPSIZE (sizeof (init_cygheap) + (4000 * sizeof (fhandler_union)) + (2 * 65536))
164 extern init_cygheap
*cygheap
;
165 extern void *cygheap_max
;
168 void __stdcall
cfree (void *) __attribute__ ((regparm(1)));
169 void __stdcall
cygheap_fixup_in_child (HANDLE
, bool);
170 void *__stdcall
cmalloc (cygheap_types
, DWORD
) __attribute__ ((regparm(2)));
171 void *__stdcall
crealloc (void *, DWORD
) __attribute__ ((regparm(2)));
172 void *__stdcall
ccalloc (cygheap_types
, DWORD
, DWORD
) __attribute__ ((regparm(3)));
173 char *__stdcall
cstrdup (const char *) __attribute__ ((regparm(1)));
174 char *__stdcall
cstrdup1 (const char *) __attribute__ ((regparm(1)));
175 void __stdcall
cygheap_init ();
This page took 0.043517 seconds and 6 git commands to generate.