* cygheap.h (init_cygheap): Move heap pointers here.

* include/sys/cygwin.h (perprocess): Remove heap pointers.
* dcrt0.cc (__cygwin_user_data): Reflect obsolete perprocess stuff.
(_dll_crt0): Don't initialize heap pointers.
(cygwin_dll_init): Ditto.
(release_upto): Use heap pointers from cygheap.
* heap.h: Ditto.
* fork.cc (fork_parent): Ditto.  Don't set heap pointers in ch.
(fork_child): Remove obsolete sigproc_fixup_after_fork.
* shared.cc (memory_init): Reorganize so that cygheap initialization is called
prior to regular heap since regular heap uses cygheap now.
* sigproc.cc (proc_subproc): Eliminate zombies allocation.
(sigproc_init): Move zombies alloation here.  Don't free up array on fork, just
reuse it.
(sigproc_fixup_after_fork): Eliminate.
* sigproc.h: Ditto.
* include/cygwin/version.h: Reflect change to perprocess structure.
This commit is contained in:
Christopher Faylor 2001-09-07 21:32:07 +00:00
parent b2d319cb3e
commit 1ff9f4b937
43 changed files with 566 additions and 538 deletions

View File

@ -1,3 +1,23 @@
Fri Sep 7 17:11:11 2001 Christopher Faylor <cgf@cygnus.com>
* cygheap.h (init_cygheap): Move heap pointers here.
* include/sys/cygwin.h (perprocess): Remove heap pointers.
* dcrt0.cc (__cygwin_user_data): Reflect obsolete perprocess stuff.
(_dll_crt0): Don't initialize heap pointers.
(cygwin_dll_init): Ditto.
(release_upto): Use heap pointers from cygheap.
* heap.h: Ditto.
* fork.cc (fork_parent): Ditto. Don't set heap pointers in ch.
(fork_child): Remove obsolete sigproc_fixup_after_fork.
* shared.cc (memory_init): Reorganize so that cygheap initialization is
called prior to regular heap since regular heap uses cygheap now.
* sigproc.cc (proc_subproc): Eliminate zombies allocation.
(sigproc_init): Move zombies alloation here. Don't free up array on
fork, just reuse it.
(sigproc_fixup_after_fork): Eliminate.
* sigproc.h: Ditto.
* include/cygwin/version.h: Reflect change to perprocess structure.
Fri Sep 7 10:53:34 2001 Jason Tishler <jason@tishler.net>
* poll.cc (poll): Change implementation to only call select() when no
@ -86,7 +106,7 @@ Tue Sep 4 22:14:00 2001 Corinna Vinschen <corinna@vinschen.de>
2001-09-04 Kazuhiro Fujieda <fujieda@jaist.ac.jp>
* fhandler_console.cc (fhandler_console::char_command): Save the cursor
* fhandler_console.cc (fhandler_console::char_command): Save the cursor
position relative to the top of the window.
* fhandler_cc (fhandler_console::write): Ditto.

View File

@ -268,9 +268,9 @@ wsock_init ()
int (*wsastartup) (int, WSADATA *);
wsastartup = (int (*)(int, WSADATA *))
GetProcAddress ((HMODULE) (dll->handle), "WSAStartup");
GetProcAddress ((HMODULE) (dll->handle), "WSAStartup");
if (wsastartup)
{
{
int res = wsastartup ((2<<8) | 2, &wsadata);
debug_printf ("res %d", res);
@ -283,7 +283,7 @@ wsock_init ()
debug_printf ("lpVendorInfo %d", wsadata.lpVendorInfo);
wsock_started = 1;
}
}
}
InterlockedDecrement (&here);

View File

@ -67,7 +67,7 @@ public:
if (!m)
return 1;
return strncasematch (m->native_path, path, m->native_pathlen)
&& (path[m->native_pathlen] == '\\' || !path[m->native_pathlen]);
&& (path[m->native_pathlen] == '\\' || !path[m->native_pathlen]);
}
const char *unchroot (const char *path)
{
@ -153,6 +153,9 @@ struct init_cygheap
{
_cmalloc_entry *chain;
char *buckets[32];
void *heapbase;
void *heapptr;
void *heaptop;
cygheap_root root;
cygheap_user user;
mode_t umask;

View File

@ -101,9 +101,9 @@ extern "C"
/* calloc */ export_calloc,
/* premain */ {NULL, NULL, NULL, NULL},
/* run_ctors_p */ 0,
/* unused */ { 0, 0, 0},
/* heapbase */ NULL, /* heapptr */ NULL, /* heaptop */ NULL,
/* unused1 */ 0, /* forkee */ 0, /* hmodule */ NULL,
/* unused */ {0, 0, 0, 0, 0, 0, 0},
/* forkee */ 0,
/* hmodule */ NULL,
/* api_major */ CYGWIN_VERSION_API_MAJOR,
/* api_minor */ CYGWIN_VERSION_API_MINOR,
/* unused2 */ {0, 0, 0, 0, 0},
@ -683,9 +683,6 @@ dll_crt0_1 ()
cygheap_fixup_in_child (child_proc_info, 0);
alloc_stack (fork_info);
set_myself (mypid);
user_data->heaptop = child_proc_info->heaptop;
user_data->heapbase = child_proc_info->heapbase;
user_data->heapptr = child_proc_info->heapptr;
ProtectHandle (child_proc_info->forker_finished);
break;
case PROC_SPAWN:
@ -896,7 +893,6 @@ _dll_crt0 ()
main_environ = user_data->envptr;
*main_environ = NULL;
user_data->heapbase = user_data->heapptr = user_data->heaptop = NULL;
set_console_handler ();
if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (),
@ -954,7 +950,6 @@ cygwin_dll_init ()
{
static char **envp;
static int _fmode;
user_data->heapbase = user_data->heapptr = user_data->heaptop = NULL;
if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (),
GetCurrentProcess (), &hMainProc, 0, FALSE,

View File

@ -201,14 +201,14 @@ readdir (DIR * dir)
char *c = dir->__d_dirent->d_name;
int len = strlen (c);
if (strcasematch (c + len - 4, ".lnk"))
{
{
char fbuf[MAX_PATH + 1];
strcpy (fbuf, dir->__d_dirname);
strcpy (fbuf + strlen (fbuf) - 1, dir->__d_dirent->d_name);
path_conv fpath (fbuf, PC_SYM_NOFOLLOW);
if (fpath.issymlink ())
c[len - 4] = '\0';
}
c[len - 4] = '\0';
}
}
/* Compute d_ino by combining filename hash with the directory hash
@ -387,7 +387,7 @@ rmdir (const char *dir)
/* Even own directories can't be removed if R/O attribute is set. */
if (real_dir.file_attributes () & FILE_ATTRIBUTE_READONLY)
SetFileAttributes (real_dir.get_win32 (), real_dir.file_attributes () &
~FILE_ATTRIBUTE_READONLY);
~FILE_ATTRIBUTE_READONLY);
if (RemoveDirectoryA (real_dir.get_win32 ()))
{
@ -402,7 +402,7 @@ rmdir (const char *dir)
else
{
if (GetLastError() == ERROR_ACCESS_DENIED)
{
{
/* On 9X ERROR_ACCESS_DENIED is returned if you try to remove
a non-empty directory. */
if (!iswinnt)

View File

@ -13,6 +13,10 @@ details. */
#include "perprocess.h"
#include "dll_init.h"
#include "environ.h"
#include "security.h"
#include "fhandler.h"
#include "dtable.h"
#include "cygheap.h"
extern void __stdcall check_sanity_and_sync (per_process *);
@ -253,7 +257,7 @@ release_upto (const char *name, DWORD here)
{
size = mb.RegionSize;
if (!(mb.State == MEM_RESERVE && mb.AllocationProtect == PAGE_NOACCESS &&
((void *) start < user_data->heapbase || (void *) start > user_data->heaptop)))
((void *) start < cygheap->heapbase || (void *) start > cygheap->heaptop)))
continue;
if (!VirtualFree ((void *) start, 0, MEM_RELEASE))
api_fatal ("couldn't release memory %p(%d) for '%s' alignment, %E\n",

View File

@ -28,6 +28,25 @@
* malloc_usable_size(P) is equivalent to realloc(P, malloc_usable_size(P))
*
* $Log$
* Revision 1.4 2001/09/07 21:32:04 cgf
* * cygheap.h (init_cygheap): Move heap pointers here.
* * include/sys/cygwin.h (perprocess): Remove heap pointers.
* * dcrt0.cc (__cygwin_user_data): Reflect obsolete perprocess stuff.
* (_dll_crt0): Don't initialize heap pointers.
* (cygwin_dll_init): Ditto.
* (release_upto): Use heap pointers from cygheap.
* * heap.h: Ditto.
* * fork.cc (fork_parent): Ditto. Don't set heap pointers in ch.
* (fork_child): Remove obsolete sigproc_fixup_after_fork.
* * shared.cc (memory_init): Reorganize so that cygheap initialization is called
* prior to regular heap since regular heap uses cygheap now.
* * sigproc.cc (proc_subproc): Eliminate zombies allocation.
* (sigproc_init): Move zombies alloation here. Don't free up array on fork, just
* reuse it.
* (sigproc_fixup_after_fork): Eliminate.
* * sigproc.h: Ditto.
* * include/cygwin/version.h: Reflect change to perprocess structure.
*
* Revision 1.3 2001/06/26 14:47:48 cgf
* * mmap.cc: Clean up *ResourceLock calls throughout.
* * thread.cc (pthread_cond::TimedWait): Check for WAIT_TIMEOUT as well as
@ -64,8 +83,8 @@
* VERSION 2.6.4 Thu Nov 28 07:54:55 1996 Doug Lea (dl at gee)
Note: There may be an updated version of this malloc obtainable at
ftp://g.oswego.edu/pub/misc/malloc.c
Check before installing!
ftp://g.oswego.edu/pub/misc/malloc.c
Check before installing!
* Why use this malloc?
@ -142,7 +161,7 @@
and status information.
Minimum allocated size: 4-byte ptrs: 16 bytes (including 4 overhead)
8-byte ptrs: 24/32 bytes (including, 4/8 overhead)
8-byte ptrs: 24/32 bytes (including, 4/8 overhead)
When a chunk is freed, 12 (for 4byte ptrs) or 20 (for 8 byte
ptrs but 4 byte size) or 24 (for 8/8) additional bytes are
@ -154,7 +173,7 @@
pointer to something of the minimum allocatable size.
Maximum allocated size: 4-byte size_t: 2^31 - 8 bytes
8-byte size_t: 2^63 - 16 bytes
8-byte size_t: 2^63 - 16 bytes
It is assumed that (possibly signed) size_t bit values suffice to
represent chunk sizes. `Possibly signed' is due to the fact
@ -170,11 +189,11 @@
make the normal worst-case wastage 15 bytes (i.e., up to 15
more bytes will be allocated than were requested in malloc), with
two exceptions:
1. Because requests for zero bytes allocate non-zero space,
the worst case wastage for a request of zero bytes is 24 bytes.
2. For requests >= mmap_threshold that are serviced via
mmap(), the worst case wastage is 8 bytes plus the remainder
from a system page (the minimal mmap unit); typically 4096 bytes.
1. Because requests for zero bytes allocate non-zero space,
the worst case wastage for a request of zero bytes is 24 bytes.
2. For requests >= mmap_threshold that are serviced via
mmap(), the worst case wastage is 8 bytes plus the remainder
from a system page (the minimal mmap unit); typically 4096 bytes.
* Limitations
@ -435,14 +454,14 @@ do { \
if(mzsz <= 9*sizeof(mzsz)) { \
INTERNAL_SIZE_T* mz = (INTERNAL_SIZE_T*) (charp); \
if(mzsz >= 5*sizeof(mzsz)) { *mz++ = 0; \
*mz++ = 0; \
*mz++ = 0; \
if(mzsz >= 7*sizeof(mzsz)) { *mz++ = 0; \
*mz++ = 0; \
if(mzsz >= 9*sizeof(mzsz)) { *mz++ = 0; \
*mz++ = 0; }}} \
*mz++ = 0; \
*mz++ = 0; \
*mz = 0; \
*mz++ = 0; \
if(mzsz >= 9*sizeof(mzsz)) { *mz++ = 0; \
*mz++ = 0; }}} \
*mz++ = 0; \
*mz++ = 0; \
*mz = 0; \
} else memset((charp), 0, mzsz); \
} while(0)
@ -453,14 +472,14 @@ do { \
INTERNAL_SIZE_T* mcsrc = (INTERNAL_SIZE_T*) (src); \
INTERNAL_SIZE_T* mcdst = (INTERNAL_SIZE_T*) (dest); \
if(mcsz >= 5*sizeof(mcsz)) { *mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; \
if(mcsz >= 7*sizeof(mcsz)) { *mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; \
if(mcsz >= 9*sizeof(mcsz)) { *mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; }}} \
*mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; \
*mcdst = *mcsrc ; \
*mcdst++ = *mcsrc++; \
if(mcsz >= 9*sizeof(mcsz)) { *mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; }}} \
*mcdst++ = *mcsrc++; \
*mcdst++ = *mcsrc++; \
*mcdst = *mcsrc ; \
} else memcpy(dest, src, mcsz); \
} while(0)
@ -588,9 +607,9 @@ do { \
# else
# if defined(BSD) || defined(DGUX) || defined(HAVE_GETPAGESIZE)
# if __STD_C
extern size_t getpagesize(void);
extern size_t getpagesize(void);
# else
extern size_t getpagesize();
extern size_t getpagesize();
# endif
# define malloc_getpagesize getpagesize()
# else
@ -751,11 +770,11 @@ struct mallinfo {
retain whenever sbrk is called. It is used in two ways internally:
* When sbrk is called to extend the top of the arena to satisfy
a new malloc request, this much padding is added to the sbrk
request.
a new malloc request, this much padding is added to the sbrk
request.
* When malloc_trim is called automatically from free(),
it is used as the `pad' argument.
it is used as the `pad' argument.
In both cases, the actual amount of padding is rounded
so that the end of the arena is always a system page boundary.
@ -801,15 +820,15 @@ struct mallinfo {
However, it has the disadvantages that:
1. The space cannot be reclaimed, consolidated, and then
used to service later requests, as happens with normal chunks.
2. It can lead to more wastage because of mmap page alignment
requirements
3. It causes malloc performance to be more dependent on host
system memory management support routines which may vary in
implementation quality and may impose arbitrary
limitations. Generally, servicing a request via normal
malloc steps is faster than going through a system's mmap.
1. The space cannot be reclaimed, consolidated, and then
used to service later requests, as happens with normal chunks.
2. It can lead to more wastage because of mmap page alignment
requirements
3. It causes malloc performance to be more dependent on host
system memory management support routines which may vary in
implementation quality and may impose arbitrary
limitations. Generally, servicing a request via normal
malloc steps is faster than going through a system's mmap.
All together, these considerations should lead you to use mmap
only for relatively large requests.
@ -831,15 +850,15 @@ struct mallinfo {
M_MMAP_MAX is the maximum number of requests to simultaneously
service using mmap. This parameter exists because:
1. Some systems have a limited number of internal tables for
use by mmap.
2. In most systems, overreliance on mmap can degrade overall
performance.
3. If a program allocates many large regions, it is probably
better off using normal sbrk-based allocation routines that
can reclaim and reallocate normal heap memory. Using a
small value allows transition into this mode after the
first few allocations.
1. Some systems have a limited number of internal tables for
use by mmap.
2. In most systems, overreliance on mmap can degrade overall
performance.
3. If a program allocates many large regions, it is probably
better off using normal sbrk-based allocation routines that
can reclaim and reallocate normal heap memory. Using a
small value allows transition into this mode after the
first few allocations.
Setting to 0 disables all use of mmap. If HAVE_MMAP is not set,
the default value is 0, and attempts to set it to non-zero values
@ -1162,7 +1181,7 @@ void gcleanup ()
rval = VirtualFree ((void*)gAddressBase,
gNextAddress - gAddressBase,
MEM_DECOMMIT);
ASSERT (rval);
ASSERT (rval);
}
while (head)
{
@ -1326,17 +1345,17 @@ typedef Chunk* mchunkptr;
chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of previous chunk, if allocated | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of chunk, in bytes |P|
| Size of previous chunk, if allocated | |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of chunk, in bytes |P|
mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| User data starts here... .
. .
. (malloc_usable_space() bytes) .
. |
| User data starts here... .
. .
. (malloc_usable_space() bytes) .
. |
nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of chunk |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of chunk |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Where "chunk" is the front of the chunk for the purpose of most of
@ -1350,20 +1369,20 @@ nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Free chunks are stored in circular doubly-linked lists, and look like this:
chunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of previous chunk |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Size of previous chunk |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
`head:' | Size of chunk, in bytes |P|
mem-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Forward pointer to next chunk in list |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Back pointer to previous chunk in list |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused space (may be 0 bytes long) .
. .
. |
| Forward pointer to next chunk in list |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Back pointer to previous chunk in list |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Unused space (may be 0 bytes long) .
. .
. |
nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
`foot:' | Size of chunk, in bytes |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The P (PREV_INUSE) bit, stored in the unused low-order bit of the
chunk size (which is always a multiple of two words), is an in-use
@ -1380,16 +1399,16 @@ nextchunk-> +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
The two exceptions to all this are
1. The special chunk `top', which doesn't bother using the
trailing size field since there is no
next contiguous chunk that would have to index off it. (After
initialization, `top' is forced to always exist. If it would
become less than MINSIZE bytes long, it is replenished via
malloc_extend_top.)
trailing size field since there is no
next contiguous chunk that would have to index off it. (After
initialization, `top' is forced to always exist. If it would
become less than MINSIZE bytes long, it is replenished via
malloc_extend_top.)
2. Chunks allocated via mmap, which have the second-lowest-order
bit (IS_MMAPPED) set in their size fields. Because they are
never merged or traversed from any other chunk, they have no
foot size or inuse information.
bit (IS_MMAPPED) set in their size fields. Because they are
never merged or traversed from any other chunk, they have no
foot size or inuse information.
Available chunks are kept in any of several places (all declared below):
@ -1682,7 +1701,7 @@ static mbinptr av_[NAV * 2 + 2] = {
((((unsigned long)(sz)) >> 9) <= 84) ? 110 + (((unsigned long)(sz)) >> 12): \
((((unsigned long)(sz)) >> 9) <= 340) ? 119 + (((unsigned long)(sz)) >> 15): \
((((unsigned long)(sz)) >> 9) <= 1364) ? 124 + (((unsigned long)(sz)) >> 18): \
126)
126)
/*
bins for chunks < 512 are all spaced 8 bytes apart, and hold
identically sized chunks. This is exploited in malloc.
@ -2565,20 +2584,20 @@ static void malloc_extend_top(nb) INTERNAL_SIZE_T nb;
/* If not enough space to do this, then user did something very wrong */
if (old_top_size < MINSIZE)
{
set_head(top, PREV_INUSE); /* will force null return from malloc */
return;
set_head(top, PREV_INUSE); /* will force null return from malloc */
return;
}
old_top_size -= 2*SIZE_SZ;
chunk_at_offset(old_top, old_top_size )->size =
SIZE_SZ|PREV_INUSE;
SIZE_SZ|PREV_INUSE;
chunk_at_offset(old_top, old_top_size + SIZE_SZ)->size =
SIZE_SZ|PREV_INUSE;
SIZE_SZ|PREV_INUSE;
set_head_size(old_top, old_top_size);
/* If possible, release the rest. */
if (old_top_size >= MINSIZE) {
init_freeable_chunk(old_top);
fREe(chunk2mem(old_top));
fREe(chunk2mem(old_top));
}
}
#endif /* OTHER_SBRKS */
@ -2613,43 +2632,43 @@ static void malloc_extend_top(nb) INTERNAL_SIZE_T nb;
From there, the first successful of the following steps is taken:
1. The bin corresponding to the request size is scanned, and if
a chunk of exactly the right size is found, it is taken.
a chunk of exactly the right size is found, it is taken.
2. The most recently remaindered chunk is used if it is big
enough. This is a form of (roving) first fit, used only in
the absence of exact fits. Runs of consecutive requests use
the remainder of the chunk used for the previous such request
whenever possible. This limited use of a first-fit style
allocation strategy tends to give contiguous chunks
coextensive lifetimes, which improves locality and can reduce
fragmentation in the long run.
enough. This is a form of (roving) first fit, used only in
the absence of exact fits. Runs of consecutive requests use
the remainder of the chunk used for the previous such request
whenever possible. This limited use of a first-fit style
allocation strategy tends to give contiguous chunks
coextensive lifetimes, which improves locality and can reduce
fragmentation in the long run.
3. Other bins are scanned in increasing size order, using a
chunk big enough to fulfill the request, and splitting off
any remainder. This search is strictly by best-fit; i.e.,
the smallest (with ties going to approximately the least
recently used) chunk that fits is selected.
chunk big enough to fulfill the request, and splitting off
any remainder. This search is strictly by best-fit; i.e.,
the smallest (with ties going to approximately the least
recently used) chunk that fits is selected.
4. If large enough, the chunk bordering the end of memory
(`top') is split off. (This use of `top' is in accord with
the best-fit search rule. In effect, `top' is treated as
larger (and thus less well fitting) than any other available
chunk since it can be extended to be as large as necessary
(up to system limitations).
(`top') is split off. (This use of `top' is in accord with
the best-fit search rule. In effect, `top' is treated as
larger (and thus less well fitting) than any other available
chunk since it can be extended to be as large as necessary
(up to system limitations).
5. If the request size meets the mmap threshold and the
system supports mmap, and there are few enough currently
allocated mmapped regions, and a call to mmap succeeds,
the request is allocated via direct memory mapping.
system supports mmap, and there are few enough currently
allocated mmapped regions, and a call to mmap succeeds,
the request is allocated via direct memory mapping.
6. Otherwise, the top of memory is extended by
obtaining more space from the system (normally using sbrk,
but definable to anything else via the MORECORE macro).
Memory is gathered from the system (in system page-sized
units) in a way that allows chunks obtained across different
sbrk calls to be consolidated, but does not require
contiguous memory. Thus, it should be safe to intersperse
mallocs with other sbrk calls.
obtaining more space from the system (normally using sbrk,
but definable to anything else via the MORECORE macro).
Memory is gathered from the system (in system page-sized
units) in a way that allows chunks obtained across different
sbrk calls to be consolidated, but does not require
contiguous memory. Thus, it should be safe to intersperse
mallocs with other sbrk calls.
All allocations are made from the the `lowest' part of any found
@ -2725,18 +2744,18 @@ Void_t* mALLOc(bytes) size_t bytes;
if (remainder_size >= (long)MINSIZE) /* too big */
{
--idx; /* adjust to rescan below after checking last remainder */
break;
--idx; /* adjust to rescan below after checking last remainder */
break;
}
else if (remainder_size >= 0) /* exact fit */
{
unlink(victim, bck, fwd);
set_inuse_bit_at_offset(victim, victim_size);
unlink(victim, bck, fwd);
set_inuse_bit_at_offset(victim, victim_size);
check_freefill(victim, victim_size, victim_size);
init_malloced_chunk(victim, bytes);
check_malloced_chunk(victim, nb);
return chunk2mem(victim);
return chunk2mem(victim);
}
}
@ -2798,8 +2817,8 @@ Void_t* mALLOc(bytes) size_t bytes;
block <<= 1;
while ((block & binblocks) == 0)
{
idx += BINBLOCKWIDTH;
block <<= 1;
idx += BINBLOCKWIDTH;
block <<= 1;
}
}
@ -2812,39 +2831,39 @@ Void_t* mALLOc(bytes) size_t bytes;
/* For each bin in this block ... */
do
{
/* Find and use first big enough chunk ... */
/* Find and use first big enough chunk ... */
for (victim = last(bin); victim != bin; victim = victim->bk)
{
victim_size = chunksize(victim);
remainder_size = victim_size - nb;
for (victim = last(bin); victim != bin; victim = victim->bk)
{
victim_size = chunksize(victim);
remainder_size = victim_size - nb;
if (remainder_size >= (long)MINSIZE) /* split */
{
remainder = chunk_at_offset(victim, nb);
set_head(victim, nb | PREV_INUSE);
if (remainder_size >= (long)MINSIZE) /* split */
{
remainder = chunk_at_offset(victim, nb);
set_head(victim, nb | PREV_INUSE);
check_freefill(victim, nb, victim_size);
unlink(victim, bck, fwd);
init_malloced_chunk(victim, bytes);
unlink(victim, bck, fwd);
init_malloced_chunk(victim, bytes);
link_last_remainder(remainder);
set_head(remainder, remainder_size | PREV_INUSE);
set_foot(remainder, remainder_size);
set_head(remainder, remainder_size | PREV_INUSE);
set_foot(remainder, remainder_size);
init_freed_chunk(remainder, remainder_size, 0);
check_malloced_chunk(victim, nb);
return chunk2mem(victim);
}
return chunk2mem(victim);
}
else if (remainder_size >= 0) /* take */
{
else if (remainder_size >= 0) /* take */
{
check_freefill(victim, victim_size, victim_size);
set_inuse_bit_at_offset(victim, victim_size);
unlink(victim, bck, fwd);
set_inuse_bit_at_offset(victim, victim_size);
unlink(victim, bck, fwd);
init_malloced_chunk(victim, bytes);
check_malloced_chunk(victim, nb);
return chunk2mem(victim);
}
return chunk2mem(victim);
}
}
}
bin = next_bin(bin);
@ -2854,12 +2873,12 @@ Void_t* mALLOc(bytes) size_t bytes;
do /* Possibly backtrack to try to clear a partial block */
{
if ((startidx & (BINBLOCKWIDTH - 1)) == 0)
{
binblocks &= ~block;
break;
}
--startidx;
if ((startidx & (BINBLOCKWIDTH - 1)) == 0)
{
binblocks &= ~block;
break;
}
--startidx;
q = prev_bin(q);
} while (first(q) == q);
@ -2867,14 +2886,14 @@ Void_t* mALLOc(bytes) size_t bytes;
if ( (block <<= 1) <= binblocks && (block != 0) )
{
while ((block & binblocks) == 0)
{
idx += BINBLOCKWIDTH;
block <<= 1;
}
while ((block & binblocks) == 0)
{
idx += BINBLOCKWIDTH;
block <<= 1;
}
}
else
break;
break;
}
}
@ -2888,7 +2907,7 @@ Void_t* mALLOc(bytes) size_t bytes;
#if HAVE_MMAP
/* If big and would otherwise need to extend, try to use mmap instead */
if ((unsigned long)nb >= (unsigned long)mmap_threshold &&
(victim = mmap_chunk(nb)) != 0) {
(victim = mmap_chunk(nb)) != 0) {
init_malloced_chunk(victim, bytes);
return chunk2mem(victim);
}
@ -2926,13 +2945,13 @@ Void_t* mALLOc(bytes) size_t bytes;
2. If the chunk was allocated via mmap, it is release via munmap().
3. If a returned chunk borders the current high end of memory,
it is consolidated into the top, and if the total unused
topmost memory exceeds the trim threshold, malloc_trim is
called.
it is consolidated into the top, and if the total unused
topmost memory exceeds the trim threshold, malloc_trim is
called.
4. Other chunks are consolidated as they arrive, and
placed in corresponding bins. (This includes the case of
consolidating with the current `last_remainder').
placed in corresponding bins. (This includes the case of
consolidating with the current `last_remainder').
*/
@ -3152,26 +3171,26 @@ Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
/* Forward into top only if a remainder */
if (next == top)
{
if ((long)(nextsize + newsize) >= (long)(nb + MINSIZE))
{
if ((long)(nextsize + newsize) >= (long)(nb + MINSIZE))
{
check_freefill(next, nb - oldsize, nextsize);
newsize += nextsize;
top = chunk_at_offset(oldp, nb);
set_head(top, (newsize - nb) | PREV_INUSE);
top = chunk_at_offset(oldp, nb);
set_head(top, (newsize - nb) | PREV_INUSE);
init_freed_chunk(top, newsize - nb, 0);
set_head_size(oldp, nb);
set_head_size(oldp, nb);
init_realloced_chunk(oldp, bytes, oldsize);
return chunk2mem(oldp);
}
}
}
/* Forward into next chunk */
else if (((long)(nextsize + newsize) >= (long)nb))
{
check_freefill(next, nb - oldsize, nextsize);
unlink(next, bck, fwd);
newsize += nextsize;
goto split;
unlink(next, bck, fwd);
newsize += nextsize;
goto split;
}
}
else
@ -3191,52 +3210,52 @@ Void_t* rEALLOc(oldmem, bytes) Void_t* oldmem; size_t bytes;
if (next != 0)
{
/* into top */
if (next == top)
{
if ((long)(nextsize + prevsize + newsize) >= (long)(nb + MINSIZE))
{
/* into top */
if (next == top)
{
if ((long)(nextsize + prevsize + newsize) >= (long)(nb + MINSIZE))
{
check_freefill(prev, nb, prevsize);
check_freefill(next, nb - (prevsize + newsize), nextsize);
unlink(prev, bck, fwd);
newp = prev;
newsize += prevsize + nextsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
top = chunk_at_offset(newp, nb);
set_head(top, (newsize - nb) | PREV_INUSE);
newp = prev;
newsize += prevsize + nextsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
top = chunk_at_offset(newp, nb);
set_head(top, (newsize - nb) | PREV_INUSE);
init_freed_chunk(top, newsize - nb, 0);
set_head_size(newp, nb);
set_head_size(newp, nb);
init_realloced_chunk(newp, bytes, oldsize);
return newmem;
}
}
return newmem;
}
}
/* into next chunk */
else if (((long)(nextsize + prevsize + newsize) >= (long)(nb)))
{
/* into next chunk */
else if (((long)(nextsize + prevsize + newsize) >= (long)(nb)))
{
check_freefill(prev, nb, prevsize);
check_freefill(next, nb - (prevsize + newsize), nextsize);
unlink(next, bck, fwd);
unlink(prev, bck, fwd);
newp = prev;
newsize += nextsize + prevsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
goto split;
}
unlink(next, bck, fwd);
unlink(prev, bck, fwd);
newp = prev;
newsize += nextsize + prevsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
goto split;
}
}
/* backward only */
if (prev != 0 && (long)(prevsize + newsize) >= (long)nb)
{
check_freefill(prev, nb, prevsize);
unlink(prev, bck, fwd);
newp = prev;
newsize += prevsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
goto split;
unlink(prev, bck, fwd);
newp = prev;
newsize += prevsize;
newmem = chunk2mem(newp);
malloc_COPY(newmem, oldmem, oldsize - OVERHEAD);
goto split;
}
}
@ -3572,27 +3591,27 @@ int malloc_trim(pad) size_t pad;
if (new_lim == (char*)(MORECORE_FAILURE)) /* sbrk failed? */
{
/* Try to figure out what we have */
current_lim = (char*)(MORECORE (0));
top_size = current_lim - (char*)top;
if (top_size >= (long)MINSIZE) /* if not, we are very very dead! */
{
sbrked_mem = current_lim - sbrk_base;
set_head(top, top_size | PREV_INUSE);
/* Try to figure out what we have */
current_lim = (char*)(MORECORE (0));
top_size = current_lim - (char*)top;
if (top_size >= (long)MINSIZE) /* if not, we are very very dead! */
{
sbrked_mem = current_lim - sbrk_base;
set_head(top, top_size | PREV_INUSE);
init_freed_chunk(top, top_size, 0);
}
check_chunk(top);
return 0;
}
check_chunk(top);
return 0;
}
else
{
/* Success. Adjust top accordingly. */
set_head(top, (top_size - extra) | PREV_INUSE);
sbrked_mem -= extra;
/* Success. Adjust top accordingly. */
set_head(top, (top_size - extra) | PREV_INUSE);
sbrked_mem -= extra;
init_freed_chunk(top, top_size - extra, 0);
check_chunk(top);
return 1;
check_chunk(top);
return 1;
}
}
}

View File

@ -91,7 +91,7 @@ fillout_pinfo (pid_t pid, int winpid)
static DWORD
get_cygdrive_info (char *user, char *system, char *user_flags,
char *system_flags)
char *system_flags)
{
int res = mount_table->get_cygdrive_info (user, system, user_flags,
system_flags);

View File

@ -960,7 +960,7 @@ fhandler_disk_file::fstat (struct stat *buf)
{
/* If read-only attribute is set, modify ntsec return value */
if ((local.dwFileAttributes & FILE_ATTRIBUTE_READONLY)
&& !get_symlink_p ())
&& !get_symlink_p ())
buf->st_mode &= ~(S_IWUSR | S_IWGRP | S_IWOTH);
if (!(buf->st_mode & S_IFMT))
@ -1094,9 +1094,9 @@ int fhandler_base::fcntl (int cmd, void *arg)
* Since O_ASYNC isn't defined in fcntl.h it's currently
* ignored as well.
*/
const int allowed_flags = O_APPEND | O_NONBLOCK_MASK;
const int allowed_flags = O_APPEND | O_NONBLOCK_MASK;
int new_flags = (int) arg & allowed_flags;
/* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
/* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
Set only the flag that has been passed in. If both are set, just
record O_NONBLOCK. */
if ((new_flags & OLD_O_NDELAY) && (new_flags & O_NONBLOCK))
@ -1249,7 +1249,7 @@ fhandler_disk_file::open (const char *path, int flags, mode_t mode)
|| !(flags & O_CREAT) || real_path.case_clash))
{
set_errno (flags & O_CREAT && real_path.case_clash ? ECASECLASH
: real_path.error);
: real_path.error);
syscall_printf ("0 = fhandler_disk_file::open (%s, %p)", path, flags);
return 0;
}

View File

@ -321,7 +321,7 @@ fhandler_console::read (void *pv, size_t buflen)
an ASCII control character, interpret is as META. */
meta = (control_key_state & ALT_PRESSED) != 0
&& ((control_key_state & CTRL_PRESSED) == 0
|| (ich >= 0 && ich <= 0x1f || ich == 0x7f));
|| (ich >= 0 && ich <= 0x1f || ich == 0x7f));
else
/* Win9x: there's no way to distinguish Alt from AltGr, so rely
on meta_mask heuristic (see fhandler_console constructor). */

View File

@ -179,8 +179,8 @@ fhandler_dev_floppy::lseek (off_t offset, int whence)
devbufstart = devbufend = 0;
if (SetFilePointer (get_handle (), sector_aligned_offset, NULL, FILE_BEGIN)
== INVALID_SET_FILE_POINTER)
{
== INVALID_SET_FILE_POINTER)
{
__seterrno ();
return -1;
}

View File

@ -39,15 +39,15 @@ fhandler_dev_mem::fhandler_dev_mem (const char *name, int nunit)
NTSTATUS ret;
SYSTEM_BASIC_INFORMATION sbi;
if ((ret = NtQuerySystemInformation (SystemBasicInformation, (PVOID) &sbi,
sizeof sbi, NULL)) != STATUS_SUCCESS)
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
debug_printf("NtQuerySystemInformation: ret = %d, Dos(ret) = %d",
ret, RtlNtStatusToDosError (ret));
mem_size = 0;
}
sizeof sbi, NULL)) != STATUS_SUCCESS)
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
debug_printf("NtQuerySystemInformation: ret = %d, Dos(ret) = %d",
ret, RtlNtStatusToDosError (ret));
mem_size = 0;
}
else
mem_size = sbi.PhysicalPageSize * sbi.NumberOfPhysicalPages;
mem_size = sbi.PhysicalPageSize * sbi.NumberOfPhysicalPages;
debug_printf ("MemSize: %d MB", mem_size >> 20);
}
else if (unit == 2) /* /dev/kmem - Not yet supported */
@ -78,9 +78,9 @@ fhandler_dev_mem::open (const char *, int flags, mode_t)
{
set_errno (ENOENT);
debug_printf ("%s is accessible under NT/W2K only",
unit == 1 ? "/dev/mem" :
unit == 2 ? "/dev/kmem" :
"/dev/port");
unit == 1 ? "/dev/mem" :
unit == 2 ? "/dev/kmem" :
"/dev/port");
return 0;
}
@ -96,7 +96,7 @@ fhandler_dev_mem::open (const char *, int flags, mode_t)
OBJECT_ATTRIBUTES attr;
InitializeObjectAttributes(&attr, &memstr,
OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
NULL, NULL);
ACCESS_MASK section_access;
@ -152,15 +152,15 @@ fhandler_dev_mem::write (const void *ptr, size_t ulen)
phys.QuadPart = (ULONGLONG) pos;
if ((ret = NtMapViewOfSection (get_handle (),
INVALID_HANDLE_VALUE,
&viewmem,
0L,
len,
&phys,
&len,
ViewShare,
0,
PAGE_READONLY)) != STATUS_SUCCESS)
INVALID_HANDLE_VALUE,
&viewmem,
0L,
len,
&phys,
&len,
ViewShare,
0,
PAGE_READONLY)) != STATUS_SUCCESS)
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
return -1;
@ -200,15 +200,15 @@ fhandler_dev_mem::read (void *ptr, size_t ulen)
phys.QuadPart = (ULONGLONG) pos;
if ((ret = NtMapViewOfSection (get_handle (),
INVALID_HANDLE_VALUE,
&viewmem,
0L,
len,
&phys,
&len,
ViewShare,
0,
PAGE_READONLY)) != STATUS_SUCCESS)
INVALID_HANDLE_VALUE,
&viewmem,
0L,
len,
&phys,
&len,
ViewShare,
0,
PAGE_READONLY)) != STATUS_SUCCESS)
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
return -1;
@ -283,7 +283,7 @@ fhandler_dev_mem::mmap (caddr_t *addr, size_t len, DWORD access,
OBJECT_ATTRIBUTES attr;
InitializeObjectAttributes(&attr, &memstr,
OBJ_CASE_INSENSITIVE | OBJ_INHERIT,
NULL, NULL);
NULL, NULL);
ACCESS_MASK section_access;
ULONG protect;

View File

@ -46,7 +46,7 @@ fhandler_socket::fhandler_socket (const char *name) :
set_cb (sizeof *this);
set_need_fork_fixup ();
prot_info_ptr = (LPWSAPROTOCOL_INFOA) ccalloc (HEAP_BUF, 1,
sizeof (WSAPROTOCOL_INFOA));
sizeof (WSAPROTOCOL_INFOA));
}
fhandler_socket::~fhandler_socket ()
@ -134,8 +134,8 @@ fhandler_socket::check_peer_secret_event (struct sockaddr_in* peer, int* secret)
int* secret_ptr = (secret ? : connect_secret);
__small_sprintf (buf, SECRET_EVENT_NAME, peer->sin_port,
secret_ptr [0], secret_ptr [1],
secret_ptr [2], secret_ptr [3]);
secret_ptr [0], secret_ptr [1],
secret_ptr [2], secret_ptr [3]);
ev = CreateEvent (&sec_all_nih, FALSE, FALSE, buf);
if (!ev && GetLastError () == ERROR_ALREADY_EXISTS)
{
@ -188,9 +188,9 @@ fhandler_socket::fixup_after_fork (HANDLE parent)
prot_info_ptr->dwServiceFlags1);
if (prot_info_ptr &&
(new_sock = WSASocketA (FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
prot_info_ptr, 0, 0)) == INVALID_SOCKET)
FROM_PROTOCOL_INFO,
FROM_PROTOCOL_INFO,
prot_info_ptr, 0, 0)) == INVALID_SOCKET)
{
debug_printf ("WSASocket error");
set_winsock_errno ();
@ -312,10 +312,10 @@ fhandler_socket::ioctl (unsigned int cmd, void *p)
}
ifr->ifr_flags = IFF_NOTRAILERS | IFF_UP | IFF_RUNNING;
if (ntohl (((struct sockaddr_in *) &ifr->ifr_addr)->sin_addr.s_addr)
== INADDR_LOOPBACK)
ifr->ifr_flags |= IFF_LOOPBACK;
== INADDR_LOOPBACK)
ifr->ifr_flags |= IFF_LOOPBACK;
else
ifr->ifr_flags |= IFF_BROADCAST;
ifr->ifr_flags |= IFF_BROADCAST;
res = 0;
break;
case SIOCGIFBRDADDR:
@ -424,18 +424,18 @@ fhandler_socket::fcntl (int cmd, void *arg)
{
case F_SETFL:
{
/* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
/* Carefully test for the O_NONBLOCK or deprecated OLD_O_NDELAY flag.
Set only the flag that has been passed in. If both are set, just
record O_NONBLOCK. */
int new_flags = (int) arg & O_NONBLOCK_MASK;
if ((new_flags & OLD_O_NDELAY) && (new_flags & O_NONBLOCK))
new_flags = O_NONBLOCK;
current = get_flags () & O_NONBLOCK_MASK;
current = get_flags () & O_NONBLOCK_MASK;
request = new_flags ? 1 : 0;
if (!!current != !!new_flags && (res = ioctl (FIONBIO, &request)))
break;
if (!!current != !!new_flags && (res = ioctl (FIONBIO, &request)))
break;
set_flags ((get_flags () & ~O_NONBLOCK_MASK) | new_flags);
break;
break;
}
default:
res = fhandler_base::fcntl (cmd, arg);

View File

@ -711,11 +711,11 @@ fhandler_tty_slave::read (void *ptr, size_t len)
termios_printf ("read failed, %E");
_raise (SIGHUP);
}
/* MSDN states that 5th prameter can be used to determine total
number of bytes in pipe, but for some reason this number doesn't
change after successful read. So we have to peek into the pipe
again to see if input is still available */
if (!PeekNamedPipe (get_handle (), peek_buf, 1, &bytes_in_pipe, NULL, NULL))
/* MSDN states that 5th prameter can be used to determine total
number of bytes in pipe, but for some reason this number doesn't
change after successful read. So we have to peek into the pipe
again to see if input is still available */
if (!PeekNamedPipe (get_handle (), peek_buf, 1, &bytes_in_pipe, NULL, NULL))
{
termios_printf ("PeekNamedPipe failed, %E");
_raise (SIGHUP);

View File

@ -246,7 +246,7 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
sync_with_parent ("after longjmp.", TRUE);
ProtectHandle (hParent);
sigproc_printf ("hParent %p, child 1 first_dll %p, load_dlls %d\n", hParent,
first_dll, load_dlls);
first_dll, load_dlls);
#ifdef DEBUGGING
char c;
@ -279,7 +279,6 @@ fork_child (HANDLE& hParent, dll *&first_dll, bool& load_dlls)
debug_fixup_after_fork ();
pinfo_fixup_after_fork ();
cygheap->fdtab.fixup_after_fork (hParent);
sigproc_fixup_after_fork ();
signal_fixup_after_fork ();
MALLOC_CHECK;
@ -430,9 +429,6 @@ fork_parent (HANDLE& hParent, dll *&first_dll,
init_child_info (PROC_FORK1, &ch, 1, subproc_ready);
ch.forker_finished = forker_finished;
ch.heaptop = user_data->heaptop;
ch.heapbase = user_data->heapbase;
ch.heapptr = user_data->heapptr;
stack_base (ch);
@ -489,7 +485,7 @@ fork_parent (HANDLE& hParent, dll *&first_dll,
ForceCloseHandle(forker_finished);
/* Restore impersonation */
if (cygheap->user.impersonated
&& cygheap->user.token != INVALID_HANDLE_VALUE)
&& cygheap->user.token != INVALID_HANDLE_VALUE)
ImpersonateLoggedOnUser (cygheap->user.token);
return -1;
}
@ -556,7 +552,7 @@ fork_parent (HANDLE& hParent, dll *&first_dll,
rc = fork_copy (pi, "user/cygwin data",
user_data->data_start, user_data->data_end,
user_data->bss_start, user_data->bss_end,
ch.heapbase, ch.heapptr,
cygheap->heapbase, cygheap->heapptr,
stack_here, ch.stackbottom,
dll_data_start, dll_data_end,
dll_bss_start, dll_bss_end, NULL);

View File

@ -104,7 +104,7 @@ monstartup(lowpc, highpc)
cp += p->kcountsize;
p->froms = (u_short *)cp;
/* XXX minbrk needed? */
/* XXX minbrk needed? */
//minbrk = fake_sbrk(0);
p->tos[0].link = 0;
@ -151,7 +151,7 @@ _mcleanup()
if (p->state == GMON_PROF_ERROR)
ERR("_mcleanup: tos overflow\n");
hz = PROF_HZ;
hz = PROF_HZ;
moncontrol(0);
#ifdef nope

View File

@ -83,7 +83,7 @@ public:
last_modified = data.ftLastWriteTime;
}
FindClose (h);
}
}
return state;
}
void operator = (grp_state nstate)
@ -118,37 +118,37 @@ parse_grp (struct group &grp, const char *line)
{
*dp++ = '\0';
if (!strlen (grp.gr_passwd))
grp.gr_passwd = NULL;
grp.gr_passwd = NULL;
grp.gr_gid = strtol (dp, NULL, 10);
dp = strchr (dp, ':');
if (dp)
{
if (*++dp)
{
int i = 0;
char *cp;
{
if (*++dp)
{
int i = 0;
char *cp;
for (cp = dp; (cp = strchr (cp, ',')) != NULL; ++cp)
++i;
char **namearray = (char **) calloc (i + 2, sizeof (char *));
if (namearray)
{
i = 0;
for (cp = dp; (cp = strchr (dp, ',')) != NULL; dp = cp + 1)
{
*cp = '\0';
namearray[i++] = dp;
}
namearray[i++] = dp;
namearray[i] = NULL;
}
for (cp = dp; (cp = strchr (cp, ',')) != NULL; ++cp)
++i;
char **namearray = (char **) calloc (i + 2, sizeof (char *));
if (namearray)
{
i = 0;
for (cp = dp; (cp = strchr (dp, ',')) != NULL; dp = cp + 1)
{
*cp = '\0';
namearray[i++] = dp;
}
namearray[i++] = dp;
namearray[i] = NULL;
}
grp.gr_mem = namearray;
}
else
grp.gr_mem = (char **) calloc (1, sizeof (char *));
return 1;
}
}
else
grp.gr_mem = (char **) calloc (1, sizeof (char *));
return 1;
}
}
return 0;
}
@ -195,7 +195,7 @@ read_etc_group ()
{
group_state = initializing;
if (max_lines) /* When rereading, free allocated memory first. */
{
{
for (int i = 0; i < curr_lines; ++i)
{
free (group_buf[i].gr_name);
@ -256,9 +256,9 @@ getgrgid (gid_t gid)
for (int i = 0; i < curr_lines; i++)
{
if (group_buf[i].gr_gid == DEFAULT_GID)
default_grp = group_buf + i;
default_grp = group_buf + i;
if (group_buf[i].gr_gid == gid)
return group_buf + i;
return group_buf + i;
}
return default_grp;
@ -333,8 +333,8 @@ getgroups (int gidsetsize, gid_t *grouplist, gid_t gid, const char *username)
OpenProcessToken (hMainProc, TOKEN_QUERY, &hToken))
{
if (GetTokenInformation (hToken, TokenGroups, NULL, 0, &size)
|| GetLastError () == ERROR_INSUFFICIENT_BUFFER)
{
|| GetLastError () == ERROR_INSUFFICIENT_BUFFER)
{
char buf[size];
TOKEN_GROUPS *groups = (TOKEN_GROUPS *) buf;
@ -358,12 +358,12 @@ getgroups (int gidsetsize, gid_t *grouplist, gid_t gid, const char *username)
break;
}
}
}
}
else
debug_printf ("%d = GetTokenInformation(NULL) %E", size);
debug_printf ("%d = GetTokenInformation(NULL) %E", size);
CloseHandle (hToken);
if (cnt)
return cnt;
return cnt;
}
for (int gidx = 0; (gr = internal_getgrent (gidx)); ++gidx)

View File

@ -16,6 +16,10 @@ details. */
#include "pinfo.h"
#include "heap.h"
#include "shared_info.h"
#include "security.h"
#include "fhandler.h"
#include "dtable.h"
#include "cygheap.h"
#define assert(x)

View File

@ -16,9 +16,9 @@ void malloc_init ();
#define inheap(s) (brk && ((char *) (s) >= (char *) brkbase) && ((char *) (s) <= (char *) brktop))
#define brksize ((char *) user_data->heaptop - (char *) user_data->heapbase)
#define brk (user_data->heapptr)
#define brkbase (user_data->heapbase)
#define brktop (user_data->heaptop)
#define brksize ((char *) cygheap->heaptop - (char *) cygheap->heapbase)
#define brk (cygheap->heapptr)
#define brkbase (cygheap->heapbase)
#define brktop (cygheap->heaptop)
#define brkchunk (cygwin_shared->heap_chunk_size ())

View File

@ -142,6 +142,7 @@ details. */
42: sys_errlist, sys_nerr
43: sigsetjmp, siglongjmp fixed
44: Export dirfd
45: perprocess change
*/
#define CYGWIN_VERSION_API_MAJOR 0

View File

@ -163,14 +163,7 @@ struct per_process
/* non-zero of ctors have been run. Inherited from parent. */
int run_ctors_p;
DWORD unused[3];
/* Heap management. Inherited from parent. */
void *heapbase; /* bottom of the heap */
void *heapptr; /* current index into heap */
void *heaptop; /* current top of heap */
DWORD unused1;
DWORD unused[7];
/* Non-zero means the task was forked. The value is the pid.
Inherited from parent. */

View File

@ -129,11 +129,11 @@ check_null_empty_str (const char *name)
int __stdcall
check_null_empty_str_errno (const char *name)
{
int __err;
if ((__err = check_null_empty_str (name)))
set_errno (__err);
return __err;
{
int __err;
if ((__err = check_null_empty_str (name)))
set_errno (__err);
return __err;
}
int __stdcall
@ -147,9 +147,9 @@ __check_null_invalid_struct (const void *s, unsigned sz)
int __stdcall
__check_null_invalid_struct_errno (const void *s, unsigned sz)
{
int __err;
if ((__err = __check_null_invalid_struct (s, sz)))
set_errno (__err);
return __err;
{
int __err;
if ((__err = __check_null_invalid_struct (s, sz)))
set_errno (__err);
return __err;
}

View File

@ -388,7 +388,7 @@ free_char_list (char **clist)
if (clist)
{
for (char **cl = clist; *cl; ++cl)
free (*cl);
free (*cl);
free (clist);
}
}
@ -416,7 +416,7 @@ dup_addr_list (char **src, unsigned int size)
{
char **dst;
int cnt = 0;
for (char **cl = src; *cl; ++cl)
++cnt;
if (!(dst = (char **) calloc (cnt + 1, sizeof *dst)))
@ -424,7 +424,7 @@ dup_addr_list (char **src, unsigned int size)
while (cnt-- > 0)
{
if (!(dst[cnt] = (char *) malloc(size)))
return NULL;
return NULL;
memcpy(dst[cnt], src[cnt], size);
}
return dst;
@ -438,7 +438,7 @@ free_protoent_ptr (struct protoent *&p)
debug_printf ("protoent: %s", p->p_name);
if (p->p_name)
free (p->p_name);
free (p->p_name);
free_char_list (p->p_aliases);
p = NULL;
}
@ -878,7 +878,7 @@ cygwin_connect (int fd,
in_progress = TRUE;
}
else if (err == WSAEINVAL)
WSASetLastError (WSAEISCONN);
WSASetLastError (WSAEISCONN);
}
set_winsock_errno ();
}
@ -924,9 +924,9 @@ free_servent_ptr (struct servent *&p)
debug_printf ("servent: %s", p->s_name);
if (p->s_name)
free (p->s_name);
free (p->s_name);
if (p->s_proto)
free (p->s_proto);
free (p->s_proto);
free_char_list (p->s_aliases);
p = NULL;
}
@ -1022,7 +1022,7 @@ free_hostent_ptr (struct hostent *&p)
debug_printf ("hostent: %s", p->h_name);
if (p->h_name)
free ((void *)p->h_name);
free ((void *)p->h_name);
free_char_list (p->h_aliases);
free_addr_list (p->h_addr_list);
p = NULL;
@ -1858,18 +1858,18 @@ get_nt_ifconf (struct ifconf *ifc, int what)
/*
* IFCONF Windows 95:
* HKLM/Enum/Network/MSTCP/"*"
* -> Value "Driver" enthält Subkey relativ zu
* HKLM/System/CurrentControlSet/Class/
* -> In Subkey "Bindings" die Values aufzählen
* -> Enthält Subkeys der Form "VREDIR\*"
* Das * ist ein Subkey relativ zu
* HKLM/System/CurrentControlSet/Class/Net/
* -> Value "Driver" enthält Subkey relativ zu
* HKLM/System/CurrentControlSet/Class/
* -> In Subkey "Bindings" die Values aufzählen
* -> Enthält Subkeys der Form "VREDIR\*"
* Das * ist ein Subkey relativ zu
* HKLM/System/CurrentControlSet/Class/Net/
* HKLM/System/CurrentControlSet/Class/"Driver"
* -> Value "IPAddress"
* -> Value "IPMask"
* -> Value "IPAddress"
* -> Value "IPMask"
* HKLM/System/CurrentControlSet/Class/Net/"*"(aus "VREDIR\*")
* -> Wenn Value "AdapterName" == "MS$PPP" -> ppp interface
* -> Value "DriverDesc" enthält den Namen
* -> Wenn Value "AdapterName" == "MS$PPP" -> ppp interface
* -> Value "DriverDesc" enthält den Namen
*
*/
static void

View File

@ -137,10 +137,10 @@ typedef struct _SYSTEM_PROCESSES
extern "C"
{
NTSTATUS NTAPI NtCreateToken (PHANDLE, ACCESS_MASK, POBJECT_ATTRIBUTES,
TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
PTOKEN_SOURCE);
TOKEN_TYPE, PLUID, PLARGE_INTEGER, PTOKEN_USER,
PTOKEN_GROUPS, PTOKEN_PRIVILEGES, PTOKEN_OWNER,
PTOKEN_PRIMARY_GROUP, PTOKEN_DEFAULT_DACL,
PTOKEN_SOURCE);
NTSTATUS NTAPI NtMapViewOfSection (HANDLE, HANDLE, PVOID *, ULONG, ULONG,
PLARGE_INTEGER, PULONG, SECTION_INHERIT,
ULONG, ULONG);

View File

@ -72,7 +72,7 @@ public:
last_modified = data.ftLastWriteTime;
}
FindClose (h);
}
}
return state;
}
void operator = (pwd_state nstate)

View File

@ -3115,7 +3115,7 @@ fchdir (int fd)
char path[MAX_PATH];
char posix_path[MAX_PATH];
mount_table->conv_to_posix_path (cygheap->cwd.get (path, 0, 1),
posix_path, 0);
posix_path, 0);
cygheap->fdtab[fd]->set_name (path, posix_path);
}

View File

@ -124,7 +124,7 @@ getrlimit (int resource, struct rlimit *rlp)
if (!VirtualQuery ((LPCVOID) &m, &m, sizeof m))
debug_printf ("couldn't get stack info, returning def.values. %E");
else
{
{
rlp->rlim_cur = (DWORD) &m - (DWORD) m.AllocationBase;
rlp->rlim_max = (DWORD) m.BaseAddress + m.RegionSize
- (DWORD) m.AllocationBase;
@ -174,7 +174,7 @@ setrlimit (int resource, const struct rlimit *rlp)
break;
case RLIMIT_NOFILE:
if (rlp->rlim_cur != RLIM_INFINITY)
return setdtablesize (rlp->rlim_cur);
return setdtablesize (rlp->rlim_cur);
break;
default:
set_errno (EINVAL);

View File

@ -125,7 +125,7 @@ setacl (const char *file, int nentries, aclent_t *aclbufp)
if (aclbufp[i].a_perm & S_IXOTH)
allow |= FILE_GENERIC_EXECUTE;
if ((aclbufp[i].a_perm & (S_IWOTH | S_IXOTH)) == (S_IWOTH | S_IXOTH))
allow |= FILE_DELETE_CHILD;
allow |= FILE_DELETE_CHILD;
/* Set inherit property. */
DWORD inheritance = (aclbufp[i].a_type & ACL_DEFAULT)
? INHERIT_ONLY : DONT_INHERIT;
@ -433,7 +433,7 @@ acl_access (const char *path, int flags)
&& owner == group
&& is_grp_member (myself->uid, gr->gr_gid))
break;
}
}
if (!gr)
continue;
}

View File

@ -36,12 +36,12 @@ details. */
#include "cygheap.h"
SID_IDENTIFIER_AUTHORITY sid_auth[] = {
{SECURITY_NULL_SID_AUTHORITY},
{SECURITY_WORLD_SID_AUTHORITY},
{SECURITY_LOCAL_SID_AUTHORITY},
{SECURITY_CREATOR_SID_AUTHORITY},
{SECURITY_NON_UNIQUE_AUTHORITY},
{SECURITY_NT_AUTHORITY}
{SECURITY_NULL_SID_AUTHORITY},
{SECURITY_WORLD_SID_AUTHORITY},
{SECURITY_LOCAL_SID_AUTHORITY},
{SECURITY_CREATOR_SID_AUTHORITY},
{SECURITY_NON_UNIQUE_AUTHORITY},
{SECURITY_NT_AUTHORITY}
};
cygsid well_known_null_sid ("S-1-0-0");
@ -348,7 +348,7 @@ set_process_privilege (const char *privilege, BOOL enable)
DWORD size;
if (!OpenProcessToken (hMainProc, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES,
&hToken))
&hToken))
{
__seterrno ();
goto out;
@ -365,7 +365,7 @@ set_process_privilege (const char *privilege, BOOL enable)
new_priv.Privileges[0].Attributes = enable ? SE_PRIVILEGE_ENABLED : 0;
if (!AdjustTokenPrivileges (hToken, FALSE, &new_priv,
sizeof orig_priv, &orig_priv, &size))
sizeof orig_priv, &orig_priv, &size))
{
__seterrno ();
goto out;

View File

@ -83,7 +83,7 @@ extract_nt_dom_user (const struct passwd *pw, char *domain, char *user)
if (pw->pw_gecos)
{
if ((c = strstr (pw->pw_gecos, "U-")) != NULL &&
(c == pw->pw_gecos || c[-1] == ','))
(c == pw->pw_gecos || c[-1] == ','))
{
buf[0] = '\0';
strncat (buf, c + 2, INTERNET_MAX_HOST_NAME_LENGTH + UNLEN + 1);
@ -210,7 +210,7 @@ get_lsa_srv_inf (LSA_HANDLE lsa, char *logonserver, char *domain)
PPOLICY_PRIMARY_DOMAIN_INFO pdi;
if ((ret = LsaQueryInformationPolicy (lsa, PolicyAccountDomainInformation,
(PVOID *) &adi)) != STATUS_SUCCESS)
(PVOID *) &adi)) != STATUS_SUCCESS)
{
set_errno (LsaNtStatusToWinError(ret));
return FALSE;
@ -218,7 +218,7 @@ get_lsa_srv_inf (LSA_HANDLE lsa, char *logonserver, char *domain)
lsa2wchar (account, adi->DomainName, INTERNET_MAX_HOST_NAME_LENGTH + 1);
LsaFreeMemory (adi);
if ((ret = LsaQueryInformationPolicy (lsa, PolicyPrimaryDomainInformation,
(PVOID *) &pdi)) != STATUS_SUCCESS)
(PVOID *) &pdi)) != STATUS_SUCCESS)
{
set_errno (LsaNtStatusToWinError(ret));
return FALSE;
@ -226,18 +226,18 @@ get_lsa_srv_inf (LSA_HANDLE lsa, char *logonserver, char *domain)
lsa2wchar (primary, pdi->Name, INTERNET_MAX_HOST_NAME_LENGTH + 1);
LsaFreeMemory (pdi);
if ((ret = NetServerEnum (NULL, 101, (LPBYTE *) &buf, MAX_PREFERRED_LENGTH,
&cnt, &tot, SV_TYPE_DOMAIN_CTRL, primary, NULL))
&cnt, &tot, SV_TYPE_DOMAIN_CTRL, primary, NULL))
== STATUS_SUCCESS && cnt > 0)
{
sys_wcstombs (name, buf[0].sv101_name, INTERNET_MAX_HOST_NAME_LENGTH + 1);
if (domain)
sys_wcstombs (domain, primary, INTERNET_MAX_HOST_NAME_LENGTH + 1);
sys_wcstombs (domain, primary, INTERNET_MAX_HOST_NAME_LENGTH + 1);
}
else
{
sys_wcstombs (name, account, INTERNET_MAX_HOST_NAME_LENGTH + 1);
if (domain)
sys_wcstombs (domain, account, INTERNET_MAX_HOST_NAME_LENGTH + 1);
sys_wcstombs (domain, account, INTERNET_MAX_HOST_NAME_LENGTH + 1);
}
if (ret == STATUS_SUCCESS)
NetApiBufferFree (buf);
@ -298,19 +298,19 @@ get_user_groups (WCHAR *wlogonserver, cygsidlist &grp_list, char *user)
sys_wcstombs (group, buf[i].grui0_name, UNLEN + 1);
if (!LookupAccountName (NULL, group, gsid, &glen, domain, &dlen, &use))
debug_printf ("LookupAccountName(%s): %lu\n", group, GetLastError ());
debug_printf ("LookupAccountName(%s): %lu\n", group, GetLastError ());
if (!legal_sid_type (use))
{
strcat (strcpy (group, domain), "\\");
sys_wcstombs (group + strlen (group), buf[i].grui0_name,
UNLEN + 1 - strlen (group));
glen = UNLEN + 1;
dlen = INTERNET_MAX_HOST_NAME_LENGTH + 1;
if (!LookupAccountName(NULL, group, gsid, &glen, domain, &dlen, &use))
debug_printf ("LookupAccountName(%s): %lu\n", group,GetLastError());
}
{
strcat (strcpy (group, domain), "\\");
sys_wcstombs (group + strlen (group), buf[i].grui0_name,
UNLEN + 1 - strlen (group));
glen = UNLEN + 1;
dlen = INTERNET_MAX_HOST_NAME_LENGTH + 1;
if (!LookupAccountName(NULL, group, gsid, &glen, domain, &dlen, &use))
debug_printf ("LookupAccountName(%s): %lu\n", group,GetLastError());
}
if (legal_sid_type (use))
grp_list += gsid;
grp_list += gsid;
}
NetApiBufferFree (buf);
@ -319,7 +319,7 @@ get_user_groups (WCHAR *wlogonserver, cygsidlist &grp_list, char *user)
static BOOL
is_group_member (WCHAR *wlogonserver, WCHAR *wgroup,
cygsid &usersid, cygsidlist &grp_list)
cygsid &usersid, cygsidlist &grp_list)
{
LPLOCALGROUP_MEMBERS_INFO_0 buf;
DWORD cnt, tot;
@ -390,7 +390,7 @@ get_user_local_groups (WCHAR *wlogonserver, const char *logonserver,
{
strcat (strcpy (group, domain), "\\");
sys_wcstombs (group + strlen (group), buf[i].lgrpi0_name,
UNLEN + 1 - strlen (group));
UNLEN + 1 - strlen (group));
glen = UNLEN + 1;
dlen = INTERNET_MAX_HOST_NAME_LENGTH + 1;
if (!LookupAccountName (NULL, group, gsid, &glen,
@ -565,7 +565,7 @@ get_system_priv_list (cygsidlist &grp_list)
{
privs->Privileges[privs->PrivilegeCount].Luid = priv;
privs->Privileges[privs->PrivilegeCount].Attributes =
SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
++privs->PrivilegeCount;
}
return privs;
@ -586,52 +586,52 @@ get_priv_list (LSA_HANDLE lsa, cygsid &usersid, cygsidlist &grp_list)
for (int grp = -1; grp < grp_list.count; ++grp)
{
if (grp == -1)
{
if ((ret = LsaEnumerateAccountRights (lsa, usersid, &privstrs, &cnt))
!= STATUS_SUCCESS)
continue;
}
{
if ((ret = LsaEnumerateAccountRights (lsa, usersid, &privstrs, &cnt))
!= STATUS_SUCCESS)
continue;
}
else if ((ret = LsaEnumerateAccountRights (lsa, grp_list.sids[grp],
&privstrs, &cnt))
!= STATUS_SUCCESS)
&privstrs, &cnt))
!= STATUS_SUCCESS)
continue;
for (ULONG i = 0; i < cnt; ++i)
{
LUID priv;
PTOKEN_PRIVILEGES tmp;
DWORD tmp_count;
{
LUID priv;
PTOKEN_PRIVILEGES tmp;
DWORD tmp_count;
sys_wcstombs (buf, privstrs[i].Buffer,
INTERNET_MAX_HOST_NAME_LENGTH + 1);
if (!LookupPrivilegeValue (NULL, buf, &priv))
continue;
sys_wcstombs (buf, privstrs[i].Buffer,
INTERNET_MAX_HOST_NAME_LENGTH + 1);
if (!LookupPrivilegeValue (NULL, buf, &priv))
continue;
for (DWORD p = 0; privs && p < privs->PrivilegeCount; ++p)
if (!memcmp (&priv, &privs->Privileges[p].Luid, sizeof (LUID)))
goto next_account_right;
for (DWORD p = 0; privs && p < privs->PrivilegeCount; ++p)
if (!memcmp (&priv, &privs->Privileges[p].Luid, sizeof (LUID)))
goto next_account_right;
tmp_count = privs ? privs->PrivilegeCount : 0;
tmp = (PTOKEN_PRIVILEGES)
realloc (privs, sizeof (ULONG) +
(tmp_count + 1) * sizeof (LUID_AND_ATTRIBUTES));
if (!tmp)
{
tmp_count = privs ? privs->PrivilegeCount : 0;
tmp = (PTOKEN_PRIVILEGES)
realloc (privs, sizeof (ULONG) +
(tmp_count + 1) * sizeof (LUID_AND_ATTRIBUTES));
if (!tmp)
{
if (privs)
free (privs);
LsaFreeMemory (privstrs);
LsaFreeMemory (privstrs);
debug_printf ("realloc (privs) failed.");
return NULL;
}
tmp->PrivilegeCount = tmp_count;
privs = tmp;
privs->Privileges[privs->PrivilegeCount].Luid = priv;
privs->Privileges[privs->PrivilegeCount].Attributes =
SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
++privs->PrivilegeCount;
return NULL;
}
tmp->PrivilegeCount = tmp_count;
privs = tmp;
privs->Privileges[privs->PrivilegeCount].Luid = priv;
privs->Privileges[privs->PrivilegeCount].Attributes =
SE_PRIVILEGE_ENABLED | SE_PRIVILEGE_ENABLED_BY_DEFAULT;
++privs->PrivilegeCount;
next_account_right:
;
}
next_account_right:
;
}
LsaFreeMemory (privstrs);
}
return privs;
@ -652,10 +652,10 @@ get_dacl (PACL acl, cygsid usersid, cygsidlist &grp_list)
{
if (!AddAccessAllowedAce(acl, ACL_REVISION, GENERIC_ALL,
well_known_admins_sid))
{
{
__seterrno ();
return FALSE;
}
return FALSE;
}
}
else if (!AddAccessAllowedAce(acl, ACL_REVISION, GENERIC_ALL, usersid))
{
@ -712,7 +712,7 @@ create_token (cygsid &usersid, cygsid &pgrpsid)
/* SE_CREATE_TOKEN_NAME privilege needed to call NtCreateToken. */
if ((old_priv_state = set_process_privilege (SE_CREATE_TOKEN_NAME)) < 0)
goto out;
/* Open policy object. */
if ((lsa = open_local_policy ()) == INVALID_HANDLE_VALUE)
goto out;
@ -1191,7 +1191,7 @@ get_nt_attribute (const char *file, int *attribute,
*flags |= S_ISVTX;
}
else if (ace_sid == well_known_null_sid)
{
{
/* Read SUID, SGID and VTX bits from NULL ACE. */
if (ace->Mask & FILE_READ_DATA)
*flags |= S_ISVTX;
@ -1416,11 +1416,11 @@ alloc_sd (uid_t uid, gid_t gid, const char *logsrv, int attribute,
if (attribute & (S_ISUID | S_ISGID | S_ISVTX))
{
if (attribute & S_ISUID)
null_allow |= FILE_APPEND_DATA;
null_allow |= FILE_APPEND_DATA;
if (attribute & S_ISGID)
null_allow |= FILE_WRITE_DATA;
null_allow |= FILE_WRITE_DATA;
if (attribute & S_ISVTX)
null_allow |= FILE_READ_DATA;
null_allow |= FILE_READ_DATA;
}
/* Construct deny attributes for owner and group. */
@ -1548,7 +1548,7 @@ set_security_attribute (int attribute, PSECURITY_ATTRIBUTES psa,
psa->lpSecurityDescriptor = sd_buf;
InitializeSecurityDescriptor ((PSECURITY_DESCRIPTOR)sd_buf,
SECURITY_DESCRIPTOR_REVISION);
SECURITY_DESCRIPTOR_REVISION);
psa->lpSecurityDescriptor = alloc_sd (geteuid (), getegid (),
cygheap->user.logsrv (),
attribute, (PSECURITY_DESCRIPTOR)sd_buf,

View File

@ -29,12 +29,12 @@ class cygsid {
inline const PSID assign (const PSID nsid)
{
if (!nsid)
psid = NO_SID;
psid = NO_SID;
else
{
psid = (PSID) sbuf;
CopySid (MAX_SID_LEN, psid, nsid);
}
{
psid = (PSID) sbuf;
CopySid (MAX_SID_LEN, psid, nsid);
}
return psid;
}
@ -64,7 +64,7 @@ public:
inline BOOL operator== (const PSID nsid) const
{
if (!psid || !nsid)
return nsid == psid;
return nsid == psid;
return EqualSid (psid, nsid);
}
inline BOOL operator== (const char *nsidstr) const
@ -98,9 +98,9 @@ public:
{
cygsid *tmp = new cygsid [count + 1];
if (!tmp)
return FALSE;
return FALSE;
for (int i = 0; i < count; ++i)
tmp[i] = sids[i];
tmp[i] = sids[i];
delete [] sids;
sids = tmp;
sids[count++] = nsi;
@ -116,7 +116,7 @@ public:
BOOL contains (cygsid &sid) const
{
for (int i = 0; i < count; ++i)
if (sids[i] == sid)
if (sids[i] == sid)
return TRUE;
return FALSE;
}
@ -124,9 +124,9 @@ public:
{
debug_printf ("-- begin sidlist ---");
if (!count)
debug_printf ("No elements");
debug_printf ("No elements");
for (int i = 0; i < count; ++i)
sids[i].debug_print (prefix);
sids[i].debug_print (prefix);
debug_printf ("-- ende sidlist ---");
}
};

View File

@ -151,7 +151,6 @@ memory_init ()
cygwin_shared_address);
cygwin_shared->initialize ();
heap_init ();
/* Allocate memory for the per-user mount table */
char user_name[UNLEN + 1];
@ -159,12 +158,6 @@ memory_init ()
if (!GetUserName (user_name, &user_name_len))
strcpy (user_name, "unknown");
mount_table = (mount_info *) open_shared (user_name, cygwin_mount_h,
sizeof (mount_info), 0);
debug_printf ("opening mount table for '%s' at %p", cygheap->user.name (),
mount_table_address);
ProtectHandle (cygwin_mount_h);
debug_printf ("mount table version %x at %p", mount_table->version, mount_table);
/* Initialize the Cygwin heap, if necessary */
if (!cygheap)
@ -172,9 +165,18 @@ memory_init ()
cygheap_init ();
cygheap->user.set_name (user_name);
}
cygheap->shared_h = shared_h;
ProtectHandle (cygheap->shared_h);
heap_init ();
mount_table = (mount_info *) open_shared (user_name, cygwin_mount_h,
sizeof (mount_info), 0);
debug_printf ("opening mount table for '%s' at %p", cygheap->user.name (),
mount_table_address);
ProtectHandle (cygwin_mount_h);
debug_printf ("mount table version %x at %p", mount_table->version, mount_table);
/* Initialize the Cygwin per-user mount table, if necessary */
if (!mount_table->version)
{

View File

@ -85,7 +85,7 @@ class mount_info
int write_cygdrive_info_to_registry (const char *cygdrive_prefix, unsigned flags);
int remove_cygdrive_info_from_registry (const char *cygdrive_prefix, unsigned flags);
int get_cygdrive_info (char *user, char *system, char* user_flags,
char* system_flags);
char* system_flags);
void import_v1_mounts ();

View File

@ -1,5 +1,5 @@
/* shortcut.c: Read shortcuts. This part of the code must be in C because
the C++ interface to COM doesn't work without -fvtable-thunk
the C++ interface to COM doesn't work without -fvtable-thunk
which is too dangerous to use.
Copyright 2001 Red Hat, Inc.
@ -107,7 +107,7 @@ check_shortcut (const char *path, DWORD fileattr, HANDLE h,
{
/* Check header if the shortcut is really created by Cygwin or U/WIN. */
if (got == SHORTCUT_HDR_SIZE && !cmp_shortcut_header (file_header))
{
{
hres = psl->lpVtbl->GetDescription (psl, contents, MAX_PATH);
if (FAILED (hres))
goto file_not_symlink;

View File

@ -224,8 +224,8 @@ kill_pgrp (pid_t pid, int sig)
/* Is it a process we want to kill? */
if ((pid == 0 && (p->pgid != myself->pgid || p->ctty != myself->ctty)) ||
(pid > 1 && p->pgid != pid) ||
(sig < 0 && NOTSTATE(p, PID_STOPPED)))
(pid > 1 && p->pgid != pid) ||
(sig < 0 && NOTSTATE(p, PID_STOPPED)))
continue;
sigproc_printf ("killing pid %d, pgrp %d, p->ctty %d, myself->ctty %d",
p->pid, p->pgid, p->ctty, myself->ctty);

View File

@ -303,8 +303,6 @@ proc_subproc (DWORD what, DWORD val)
int thiszombie;
thiszombie = nzombies;
if (!zombies)
zombies = (pinfo *) malloc (sizeof (pinfo) * ZOMBIEMAX);
zombies[nzombies] = pchildren[val]; // Add to zombie array
zombies[nzombies++]->process_state = PID_ZOMBIE;// Walking dead
@ -545,6 +543,11 @@ sig_dispatch_pending (int justwake)
void __stdcall
sigproc_init ()
{
if (!zombies)
zombies = (pinfo *) malloc (sizeof (pinfo) * ZOMBIEMAX);
else
nzombies = 0;
wait_sig_inited = CreateEvent (&sec_none_nih, TRUE, FALSE, NULL);
ProtectHandle (wait_sig_inited);
@ -1304,17 +1307,6 @@ wait_subproc (VOID *)
return 0;
}
void __stdcall
sigproc_fixup_after_fork ()
{
if (zombies)
{
free (zombies);
nzombies = 0;
zombies = NULL;
}
}
extern "C" {
/* Provide a stack frame when calling WaitFor* functions */

View File

@ -115,7 +115,6 @@ int __stdcall sig_send (_pinfo *, int, DWORD ebp = (DWORD) __builtin_frame_addre
bool exception = 0) __attribute__ ((regparm(3)));
void __stdcall signal_fixup_after_fork ();
void __stdcall signal_fixup_after_exec (bool);
void __stdcall sigproc_fixup_after_fork ();
extern char myself_nowait_dummy[];
extern char myself_nowait_nonmain_dummy[];

View File

@ -616,7 +616,7 @@ spawn_guts (HANDLE hToken, const char * prog_arg, const char *const *argv,
cygsid sid;
DWORD ret_len;
if (!GetTokenInformation (hToken, TokenUser, &sid, sizeof sid, &ret_len))
{
{
sid = NO_SID;
system_printf ("GetTokenInformation: %E");
}
@ -628,15 +628,15 @@ spawn_guts (HANDLE hToken, const char * prog_arg, const char *const *argv,
/* Remove impersonation */
if (cygheap->user.impersonated
&& cygheap->user.token != INVALID_HANDLE_VALUE)
&& cygheap->user.token != INVALID_HANDLE_VALUE)
RevertToSelf ();
static BOOL first_time = TRUE;
if (first_time)
{
set_process_privilege (SE_RESTORE_NAME);
first_time = FALSE;
}
{
set_process_privilege (SE_RESTORE_NAME);
first_time = FALSE;
}
/* Load users registry hive. */
load_registry_hive (sid);
@ -703,7 +703,7 @@ spawn_guts (HANDLE hToken, const char * prog_arg, const char *const *argv,
{
cygheap->fdtab.fixup_before_exec (pi.dwProcessId);
if (mode == _P_OVERLAY)
ResumeThread (pi.hThread);
ResumeThread (pi.hThread);
}
if (mode == _P_OVERLAY)

View File

@ -1138,7 +1138,7 @@ stat_worker (const char *caller, const char *name, struct stat *buf,
}
}
if (atts != -1 && (oret || (!oret && get_errno () != ENOENT
&& get_errno () != ENOSHARE)))
&& get_errno () != ENOSHARE)))
{
/* Unfortunately, the above open may fail if the file exists, though.
So we have to care for this case here, too. */
@ -1340,7 +1340,7 @@ _rename (const char *oldpath, const char *newpath)
if (real_new.file_attributes () != (DWORD) -1 &&
real_new.file_attributes () & FILE_ATTRIBUTE_READONLY)
SetFileAttributesA (real_new.get_win32 (),
real_new.file_attributes () & ~FILE_ATTRIBUTE_READONLY);
real_new.file_attributes () & ~FILE_ATTRIBUTE_READONLY);
/* Shortcut hack No. 2, part 1 */
if (!real_old.issymlink () && !real_new.error && real_new.issymlink () &&
@ -1400,9 +1400,9 @@ done:
/* Shortcut hack, No. 2, part 2 */
/* if the new filename was an existing shortcut, remove it now if the
new filename is equal to the shortcut name without .lnk suffix. */
new filename is equal to the shortcut name without .lnk suffix. */
if (lnk_suffix)
{
{
*lnk_suffix = '.';
DeleteFile (real_new.get_win32 ());
}
@ -1494,7 +1494,7 @@ check_posix_perm (const char *fname, int v)
if (!allow_smbntsec
&& ((root[0] == '\\' && root[1] == '\\')
|| GetDriveType (root) == DRIVE_REMOTE))
|| GetDriveType (root) == DRIVE_REMOTE))
return 0;
DWORD vsn, len, flags;
@ -1584,7 +1584,7 @@ pathconf (const char *file, int v)
case _PC_POSIX_PERMISSIONS:
case _PC_POSIX_SECURITY:
{
path_conv full_path (file, PC_SYM_FOLLOW | PC_FULL);
path_conv full_path (file, PC_SYM_FOLLOW | PC_FULL);
if (full_path.error)
{
set_errno (full_path.error);
@ -1595,7 +1595,7 @@ pathconf (const char *file, int v)
set_errno (EINVAL);
return -1;
}
return check_posix_perm (full_path, v);
return check_posix_perm (full_path, v);
}
default:
set_errno (EINVAL);
@ -2048,9 +2048,9 @@ seteuid (uid_t uid)
char *env;
orig_username[0] = orig_domain[0] = '\0';
if ((env = getenv ("USERNAME")))
strncat (orig_username, env, UNLEN + 1);
strncat (orig_username, env, UNLEN + 1);
if ((env = getenv ("USERDOMAIN")))
strncat (orig_domain, env, INTERNET_MAX_HOST_NAME_LENGTH + 1);
strncat (orig_domain, env, INTERNET_MAX_HOST_NAME_LENGTH + 1);
if (uid == cygheap->user.orig_uid)
{
@ -2064,7 +2064,7 @@ seteuid (uid_t uid)
if (!OpenProcessToken (GetCurrentProcess (), TOKEN_QUERY, &ptok))
debug_printf ("OpenProcessToken(): %E\n");
else if (!GetTokenInformation (ptok, TokenUser, &tok_usersid,
sizeof tok_usersid, &siz))
sizeof tok_usersid, &siz))
debug_printf ("GetTokenInformation(): %E");
else if (!LookupAccountSid (NULL, tok_usersid, username, &ulen,
domain, &dlen, &use))
@ -2100,7 +2100,7 @@ seteuid (uid_t uid)
&tok_usersid, sizeof tok_usersid, &siz))
{
debug_printf ("GetTokenInformation(): %E");
tok_usersid = NO_SID;
tok_usersid = NO_SID;
}
if (!GetTokenInformation (cygheap->user.token, TokenPrimaryGroup,
&tok_pgrpsid, sizeof tok_pgrpsid, &siz))
@ -2119,7 +2119,7 @@ seteuid (uid_t uid)
/* Check for pgrp only if current token is an internal
token. Otherwise the external provided token is
very likely overwritten here. */
(current_token_is_internal_token &&
(current_token_is_internal_token &&
pgrpsid && tok_pgrpsid && pgrpsid != tok_pgrpsid))
{
/* If not, RevertToSelf and close old token. */
@ -2143,19 +2143,19 @@ seteuid (uid_t uid)
if (ptok != INVALID_HANDLE_VALUE)
explicitely_created_token = TRUE;
else
{
{
/* create_token failed. Try subauthentication. */
debug_printf ("create token failed, try subauthentication.");
ptok = subauth (pw_new);
}
if (ptok != INVALID_HANDLE_VALUE)
{
{
cygwin_set_impersonation_token (ptok);
/* If sav_token was internally created, destroy it. */
if (sav_token != INVALID_HANDLE_VALUE &&
current_token_is_internal_token)
CloseHandle (sav_token);
}
}
else if (sav_token != INVALID_HANDLE_VALUE)
cygheap->user.token = sav_token;
}
@ -2168,9 +2168,9 @@ seteuid (uid_t uid)
RevertToSelf ();
/* If the token was explicitely created, all information has
already been set correctly. */
already been set correctly. */
if (!explicitely_created_token)
{
{
/* Try setting owner to same value as user. */
if (usersid &&
!SetTokenInformation (cygheap->user.token, TokenOwner,
@ -2186,7 +2186,7 @@ seteuid (uid_t uid)
debug_printf ("SetTokenInformation(user.token, "
"TokenPrimaryGroup): %E");
}
}
/* Now try to impersonate. */
if (!LookupAccountSid (NULL, usersid, username, &ulen,
@ -2196,11 +2196,11 @@ seteuid (uid_t uid)
system_printf ("Impersonating (%d) in set(e)uid failed: %E",
cygheap->user.token);
else
{
{
cygheap->user.impersonated = TRUE;
setenv ("USERNAME", username, 1);
setenv ("USERDOMAIN", domain, 1);
}
}
}
}
@ -2253,7 +2253,7 @@ setegid (gid_t gid)
HANDLE ptok;
if (gsid.getfromgr (gr))
{
{
if (!OpenProcessToken (GetCurrentProcess (),
TOKEN_ADJUST_DEFAULT,
&ptok))
@ -2261,12 +2261,12 @@ setegid (gid_t gid)
else
{
if (!SetTokenInformation (ptok, TokenPrimaryGroup,
&gsid, sizeof gsid))
&gsid, sizeof gsid))
debug_printf ("SetTokenInformation(myself, "
"TokenPrimaryGroup): %E");
CloseHandle (ptok);
}
}
}
}
}
}

View File

@ -61,20 +61,20 @@ sysconf (int in)
/*FALLTHRU*/
case _SC_PHYS_PAGES:
case _SC_AVPHYS_PAGES:
{
{
NTSTATUS ret;
SYSTEM_BASIC_INFORMATION sbi;
if ((ret = NtQuerySystemInformation (SystemBasicInformation,
if ((ret = NtQuerySystemInformation (SystemBasicInformation,
(PVOID) &sbi,
sizeof sbi, NULL))
!= STATUS_SUCCESS)
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
debug_printf("NtQuerySystemInformation: ret = %d, "
"Dos(ret) = %d",
ret, RtlNtStatusToDosError (ret));
{
__seterrno_from_win_error (RtlNtStatusToDosError (ret));
debug_printf("NtQuerySystemInformation: ret = %d, "
"Dos(ret) = %d",
ret, RtlNtStatusToDosError (ret));
return -1;
}
}
switch (in)
{
case _SC_NPROCESSORS_CONF:

View File

@ -102,11 +102,11 @@ settimeofday (const struct timeval *tv, const struct timezone *tz)
tz = tz; /* silence warning about unused variable */
ptm = gmtime(&tv->tv_sec);
st.wYear = ptm->tm_year + 1900;
st.wMonth = ptm->tm_mon + 1;
st.wYear = ptm->tm_year + 1900;
st.wMonth = ptm->tm_mon + 1;
st.wDayOfWeek = ptm->tm_wday;
st.wDay = ptm->tm_mday;
st.wHour = ptm->tm_hour;
st.wDay = ptm->tm_mday;
st.wHour = ptm->tm_hour;
st.wMinute = ptm->tm_min;
st.wSecond = ptm->tm_sec;
st.wMilliseconds = tv->tv_usec / 1000;

View File

@ -63,13 +63,13 @@ internal_getlogin (cygheap_user &user)
sys_wcstombs (buf, wui->wkui1_username, UNLEN + 1);
user.set_name (buf);
sys_wcstombs (buf, wui->wkui1_logon_server,
INTERNET_MAX_HOST_NAME_LENGTH + 1);
INTERNET_MAX_HOST_NAME_LENGTH + 1);
user.set_logsrv (buf);
sys_wcstombs (buf, wui->wkui1_logon_domain,
INTERNET_MAX_HOST_NAME_LENGTH + 1);
user.set_domain (buf);
NetApiBufferFree (wui);
}
}
if (!user.logsrv () && get_logon_server_and_user_domain (buf, NULL))
{
user.set_logsrv (buf + 2);
@ -84,7 +84,7 @@ internal_getlogin (cygheap_user &user)
sys_mbstowcs (wuser, user.name (), UNLEN + 1);
wlogsrv[0] = '\0';
if (user.logsrv ())
{
{
strcat (strcpy (buf, "\\\\"), user.logsrv ());
sys_mbstowcs (wlogsrv, buf, INTERNET_MAX_HOST_NAME_LENGTH + 3);
}
@ -128,7 +128,7 @@ internal_getlogin (cygheap_user &user)
in a process token of a currently impersonated process. */
if (ptok == INVALID_HANDLE_VALUE
&& !OpenProcessToken (GetCurrentProcess (),
TOKEN_ADJUST_DEFAULT | TOKEN_QUERY,
TOKEN_ADJUST_DEFAULT | TOKEN_QUERY,
&ptok))
debug_printf ("OpenProcessToken(): %E\n");
else if (!GetTokenInformation (ptok, TokenUser, &tu, sizeof tu, &siz))
@ -188,7 +188,7 @@ internal_getlogin (cygheap_user &user)
if (!SetTokenInformation (ptok, TokenOwner, &tu, sizeof tu))
debug_printf ("SetTokenInformation(TokenOwner): %E");
if (gsid && !SetTokenInformation (ptok, TokenPrimaryGroup,
&gsid, sizeof gsid))
&gsid, sizeof gsid))
debug_printf ("SetTokenInformation(TokenPrimaryGroup): %E");
}

View File

@ -61,7 +61,7 @@ uname (struct utsname *name)
else
ptype = sysinfo.dwProcessorType;
__small_sprintf (name->machine, "i%d86", ptype);
__small_sprintf (name->machine, "i%d86", ptype);
break;
case PROCESSOR_ARCHITECTURE_ALPHA:
strcpy (name->machine, "alpha");