"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "dlls/iphlpapi/ipstats.c" between
wine-5.12.tar.xz and wine-5.13.tar.xz

About: Wine is an Open Source implementation of the MS Windows API on top of X, OpenGL, and Unix. Think of Wine as a compatibility layer for running Windows programs. Development release.

ipstats.c  (wine-5.12.tar.xz):ipstats.c  (wine-5.13.tar.xz)
skipping to change at line 1888 skipping to change at line 1888
} }
struct pid_map struct pid_map
{ {
unsigned int pid; unsigned int pid;
unsigned int unix_pid; unsigned int unix_pid;
}; };
static struct pid_map *get_pid_map( unsigned int *num_entries ) static struct pid_map *get_pid_map( unsigned int *num_entries )
{ {
HANDLE snapshot = NULL;
struct pid_map *map; struct pid_map *map;
unsigned int i = 0, count = 16, size = count * sizeof(*map); unsigned int i = 0, map_count = 16, buffer_len = 4096, process_count, pos = 0;
NTSTATUS ret; NTSTATUS ret;
char *buffer = NULL, *new_buffer;
if (!(map = HeapAlloc( GetProcessHeap(), 0, size ))) return NULL; if (!(buffer = HeapAlloc( GetProcessHeap(), 0, buffer_len ))) return NULL;
SERVER_START_REQ( create_snapshot ) for (;;)
{ {
req->flags = SNAP_PROCESS; SERVER_START_REQ( list_processes )
req->attributes = 0; {
if (!(ret = wine_server_call( req ))) wine_server_set_reply( req, buffer, buffer_len );
snapshot = wine_server_ptr_handle( reply->handle ); ret = wine_server_call( req );
buffer_len = reply->info_size;
process_count = reply->process_count;
}
SERVER_END_REQ;
if (ret != STATUS_INFO_LENGTH_MISMATCH) break;
if (!(new_buffer = HeapReAlloc( GetProcessHeap(), 0, buffer, buffer_len
)))
{
HeapFree( GetProcessHeap(), 0, buffer );
return NULL;
}
} }
SERVER_END_REQ;
*num_entries = 0; if (!(map = HeapAlloc( GetProcessHeap(), 0, map_count * sizeof(*map) )))
while (ret == STATUS_SUCCESS)
{ {
SERVER_START_REQ( next_process ) HeapFree( GetProcessHeap(), 0, buffer );
return NULL;
}
for (i = 0; i < process_count; ++i)
{
const struct process_info *process;
pos = (pos + 7) & ~7;
process = (const struct process_info *)(buffer + pos);
if (i >= map_count)
{ {
req->handle = wine_server_obj_handle( snapshot ); struct pid_map *new_map;
req->reset = (i == 0); map_count *= 2;
if (!(ret = wine_server_call( req ))) if (!(new_map = HeapReAlloc( GetProcessHeap(), 0, map, map_count * s
izeof(*map))))
{ {
if (i >= count) HeapFree( GetProcessHeap(), 0, map );
{ HeapFree( GetProcessHeap(), 0, buffer );
struct pid_map *new_map; return NULL;
count *= 2;
size = count * sizeof(*new_map);
if (!(new_map = HeapReAlloc( GetProcessHeap(), 0, map, size
)))
{
HeapFree( GetProcessHeap(), 0, map );
map = NULL;
goto done;
}
map = new_map;
}
map[i].pid = reply->pid;
map[i].unix_pid = reply->unix_pid;
(*num_entries)++;
i++;
} }
map = new_map;
} }
SERVER_END_REQ;
map[i].pid = process->pid;
map[i].unix_pid = process->unix_pid;
pos += sizeof(struct process_info) + process->name_len;
pos = (pos + 7) & ~7;
pos += process->thread_count * sizeof(struct thread_info);
} }
done: HeapFree( GetProcessHeap(), 0, buffer );
NtClose( snapshot ); *num_entries = process_count;
return map; return map;
} }
static unsigned int find_owning_pid( struct pid_map *map, unsigned int num_entri es, UINT_PTR inode ) static unsigned int find_owning_pid( struct pid_map *map, unsigned int num_entri es, UINT_PTR inode )
{ {
#ifdef __linux__ #ifdef __linux__
unsigned int i, len_socket; unsigned int i, len_socket;
char socket[32]; char socket[32];
sprintf( socket, "socket:[%lu]", inode ); sprintf( socket, "socket:[%lu]", inode );
 End of changes. 14 change blocks. 
37 lines changed or deleted 51 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)