diff -up -x '*.o' wine-rtest/server/console.c wine/server/console.c --- wine-rtest/server/console.c 2005-09-19 08:17:00.000000000 -0600 +++ wine/server/console.c 2005-09-19 14:02:37.000000000 -0600 @@ -227,7 +227,7 @@ static struct object *create_console_inp console_input->history_index = 0; console_input->history_mode = 0; console_input->edition_mode = 0; - console_input->event = create_event( NULL, 0, 1, 0 ); + console_input->event = create_event( NULL, 0, FALSE, 1, 0 ); if (!console_input->history || !console_input->evt) { diff -up -x '*.o' wine-rtest/server/event.c wine/server/event.c --- wine-rtest/server/event.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/event.c 2005-09-19 12:56:27.000000000 -0600 @@ -59,11 +59,12 @@ static const struct object_ops event_ops struct event *create_event( const WCHAR *name, size_t len, + int case_sensitive, int manual_reset, int initial_state ) { struct event *event; - if ((event = create_named_object( sync_namespace, &event_ops, name, len ))) + if ((event = create_named_object( sync_namespace, &event_ops, name, len, case_sensitive ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -147,6 +148,7 @@ DECL_HANDLER(create_event) reply->handle = 0; if ((event = create_event( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), req->manual_reset, req->initial_state ))) { reply->handle = alloc_handle( current->process, event, req->access, @@ -159,6 +161,7 @@ DECL_HANDLER(create_event) DECL_HANDLER(open_event) { reply->handle = open_object( sync_namespace, get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), &event_ops, req->access, IS_INHERIT( req->attributes ) ); } diff -up -x '*.o' wine-rtest/server/handle.c wine/server/handle.c --- wine-rtest/server/handle.c 2005-09-19 08:17:00.000000000 -0600 +++ wine/server/handle.c 2005-09-19 14:03:48.000000000 -0600 @@ -521,10 +521,11 @@ obj_handle_t duplicate_handle( struct pr /* open a new handle to an existing object */ obj_handle_t open_object( const struct namespace *namespace, const WCHAR *name, size_t len, - const struct object_ops *ops, unsigned int access, int inherit ) + int case_sensitive, const struct object_ops *ops, + unsigned int access, int inherit ) { obj_handle_t handle = 0; - struct object *obj = find_object( namespace, name, len ); + struct object *obj = find_object( namespace, name, len, case_sensitive ); if (obj) { if (ops && obj->ops != ops) diff -up -x '*.o' wine-rtest/server/handle.h wine/server/handle.h --- wine-rtest/server/handle.h 2005-09-19 08:17:00.000000000 -0600 +++ wine/server/handle.h 2005-09-19 12:51:47.000000000 -0600 @@ -44,7 +44,8 @@ extern int set_handle_unix_fd( struct pr extern obj_handle_t duplicate_handle( struct process *src, obj_handle_t src_handle, struct process *dst, unsigned int access, int inherit, int options ); extern obj_handle_t open_object( const struct namespace *namespace, const WCHAR *name, size_t len, - const struct object_ops *ops, unsigned int access, int inherit ); + int case_sensitive, const struct object_ops *ops, + unsigned int access, int inherit ); extern obj_handle_t find_inherited_handle( struct process *process, const struct object_ops *ops ); extern struct handle_table *alloc_handle_table( struct process *process, int count ); extern struct handle_table *copy_handle_table( struct process *process, struct process *parent ); diff -up -x '*.o' wine-rtest/server/mailslot.c wine/server/mailslot.c --- wine-rtest/server/mailslot.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/mailslot.c 2005-09-19 15:48:07.000000000 -0600 @@ -212,8 +212,8 @@ static void mailslot_queue_async( struct fd_queue_async_timeout( fd, apc, user, iosb, type, count, timeout ); } -static struct mailslot *create_mailslot( const WCHAR *name, size_t len, int max_msgsize, - int read_timeout ) +static struct mailslot *create_mailslot( const WCHAR *name, size_t len, int case_sensitive, + int max_msgsize, int read_timeout ) { struct mailslot *mailslot; int fds[2]; @@ -225,7 +225,7 @@ static struct mailslot *create_mailslot( return NULL; } - mailslot = create_named_object( sync_namespace, &mailslot_ops, name, len ); + mailslot = create_named_object( sync_namespace, &mailslot_ops, name, len, case_sensitive ); if (!mailslot) return NULL; @@ -258,11 +258,11 @@ static struct mailslot *create_mailslot( return NULL; } -static struct mailslot *open_mailslot( const WCHAR *name, size_t len ) +static struct mailslot *open_mailslot( const WCHAR *name, size_t len, int case_sensitive ) { struct object *obj; - obj = find_object( sync_namespace, name, len ); + obj = find_object( sync_namespace, name, len, case_sensitive ); if (obj) { if (obj->ops == &mailslot_ops) @@ -352,6 +352,7 @@ DECL_HANDLER(create_mailslot) reply->handle = 0; mailslot = create_mailslot( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), req->max_msgsize, req->read_timeout ); if (mailslot) { @@ -375,7 +376,8 @@ DECL_HANDLER(open_mailslot) return; } - mailslot = open_mailslot( get_req_data(), get_req_data_size() ); + mailslot = open_mailslot( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ) ); if (mailslot) { struct mail_writer *writer; diff -up -x '*.o' wine-rtest/server/main.c wine/server/main.c --- wine-rtest/server/main.c 2005-09-19 08:17:00.000000000 -0600 +++ wine/server/main.c 2005-09-19 11:59:52.000000000 -0600 @@ -130,7 +130,7 @@ int main( int argc, char *argv[] ) sock_init(); open_master_socket(); - sync_namespace = create_namespace( 37, TRUE ); + sync_namespace = create_namespace( 37 ); setvbuf( stderr, NULL, _IOLBF, 0 ); if (debug_level) fprintf( stderr, "wineserver: starting (pid=%ld)\n", (long) getpid() ); diff -up -x '*.o' wine-rtest/server/mapping.c wine/server/mapping.c --- wine-rtest/server/mapping.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/mapping.c 2005-09-19 12:59:06.000000000 -0600 @@ -270,14 +270,14 @@ inline static int get_file_size( struct } static struct object *create_mapping( file_pos_t size, int protect, obj_handle_t handle, - const WCHAR *name, size_t len ) + const WCHAR *name, size_t len, int case_sensitive ) { struct mapping *mapping; int access = 0; if (!page_mask) init_page_size(); - if (!(mapping = create_named_object( sync_namespace, &mapping_ops, name, len ))) + if (!(mapping = create_named_object( sync_namespace, &mapping_ops, name, len, case_sensitive ))) return NULL; if (get_error() == STATUS_OBJECT_NAME_COLLISION) return &mapping->obj; /* Nothing else to do */ @@ -377,7 +377,8 @@ DECL_HANDLER(create_mapping) reply->handle = 0; if ((obj = create_mapping( size, req->protect, req->file_handle, - get_req_data(), get_req_data_size() ))) + get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ) ))) { reply->handle = alloc_handle( current->process, obj, req->access, IS_INHERIT( req->attributes ) ); release_object( obj ); @@ -388,6 +389,7 @@ DECL_HANDLER(create_mapping) DECL_HANDLER(open_mapping) { reply->handle = open_object( sync_namespace, get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), &mapping_ops, req->access, IS_INHERIT( req->attributes ) ); } diff -up -x '*.o' wine-rtest/server/mutex.c wine/server/mutex.c --- wine-rtest/server/mutex.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/mutex.c 2005-09-19 12:59:41.000000000 -0600 @@ -61,11 +61,12 @@ static const struct object_ops mutex_ops }; -static struct mutex *create_mutex( const WCHAR *name, size_t len, int owned ) +static struct mutex *create_mutex( const WCHAR *name, size_t len, int case_sensitive, + int owned ) { struct mutex *mutex; - if ((mutex = create_named_object( sync_namespace, &mutex_ops, name, len ))) + if ((mutex = create_named_object( sync_namespace, &mutex_ops, name, len, case_sensitive ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -171,7 +172,9 @@ DECL_HANDLER(create_mutex) struct mutex *mutex; reply->handle = 0; - if ((mutex = create_mutex( get_req_data(), get_req_data_size(), req->owned ))) + if ((mutex = create_mutex( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), + req->owned ))) { reply->handle = alloc_handle( current->process, mutex, req->access, IS_INHERIT( req->attributes ) ); @@ -183,6 +186,7 @@ DECL_HANDLER(create_mutex) DECL_HANDLER(open_mutex) { reply->handle = open_object( sync_namespace, get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), &mutex_ops, req->access, IS_INHERIT( req->attributes ) ); } diff -up -x '*.o' wine-rtest/server/named_pipe.c wine/server/named_pipe.c --- wine-rtest/server/named_pipe.c 2005-09-21 14:13:27.000000000 -0600 +++ wine/server/named_pipe.c 2005-09-21 15:21:11.000000000 -0600 @@ -397,7 +397,7 @@ static int pipe_server_flush( struct fd /* this kind of sux - there's no unix way to be alerted when a pipe becomes empty */ - server->event = create_event( NULL, 0, 0, 0 ); + server->event = create_event( NULL, 0, FALSE, 0, 0 ); if (!server->event) return 0; gettimeofday( &tv, NULL ); @@ -440,11 +440,11 @@ static int pipe_client_get_info( struct return flags; } -static struct named_pipe *create_named_pipe( const WCHAR *name, size_t len ) +static struct named_pipe *create_named_pipe( const WCHAR *name, size_t len, int case_sensitive ) { struct named_pipe *pipe; - pipe = create_named_object( sync_namespace, &named_pipe_ops, name, len ); + pipe = create_named_object( sync_namespace, &named_pipe_ops, name, len, case_sensitive ); if (pipe) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) @@ -458,11 +458,11 @@ static struct named_pipe *create_named_p return pipe; } -static struct named_pipe *open_named_pipe( const WCHAR *name, size_t len ) +static struct named_pipe *open_named_pipe( const WCHAR *name, size_t len, int case_sensitive ) { struct object *obj; - if ((obj = find_object( sync_namespace, name, len ))) + if ((obj = find_object( sync_namespace, name, len, case_sensitive ))) { if (obj->ops == &named_pipe_ops) return (struct named_pipe *)obj; release_object( obj ); @@ -548,7 +548,8 @@ DECL_HANDLER(create_named_pipe) struct pipe_server *server; reply->handle = 0; - pipe = create_named_pipe( get_req_data(), get_req_data_size() ); + pipe = create_named_pipe( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ) ); if (!pipe) return; @@ -599,7 +600,8 @@ DECL_HANDLER(open_named_pipe) struct named_pipe *pipe; int fds[2]; - pipe = open_named_pipe( get_req_data(), get_req_data_size() ); + pipe = open_named_pipe( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ) ); if (!pipe) { set_error( STATUS_NO_SUCH_FILE ); @@ -698,7 +700,7 @@ DECL_HANDLER(wait_named_pipe) struct named_pipe *pipe; struct pipe_server *server; - if (!(pipe = open_named_pipe( get_req_data(), get_req_data_size() ))) + if (!(pipe = open_named_pipe( get_req_data(), get_req_data_size(), FALSE ))) { set_error( STATUS_PIPE_NOT_AVAILABLE ); return; diff -up -x '*.o' wine-rtest/server/object.c wine/server/object.c --- wine-rtest/server/object.c 2005-09-21 15:23:49.000000000 -0600 +++ wine/server/object.c 2005-09-19 15:28:12.000000000 -0600 @@ -44,7 +44,6 @@ struct object_name struct namespace { unsigned int hash_size; /* size of hash table */ - int case_sensitive; /* are names case sensitive? */ struct list names[1]; /* array of hash entry lists */ }; @@ -92,8 +91,7 @@ static int get_name_hash( const struct n { WCHAR hash = 0; len /= sizeof(WCHAR); - if (namespace->case_sensitive) while (len--) hash ^= *name++; - else while (len--) hash ^= tolowerW(*name++); + while (len--) hash ^= tolowerW(*name++); return hash % namespace->hash_size; } @@ -157,14 +155,14 @@ void *alloc_object( const struct object_ } void *create_named_object( struct namespace *namespace, const struct object_ops *ops, - const WCHAR *name, size_t len ) + const WCHAR *name, size_t len, int case_sensitive ) { struct object *obj; struct object_name *name_ptr; if (!name || !len) return alloc_object( ops ); - if ((obj = find_object( namespace, name, len ))) + if ((obj = find_object( namespace, name, len, case_sensitive ))) { if (obj->ops != ops) { @@ -225,28 +223,23 @@ void release_object( void *ptr ) } /* find an object by its name; the refcount is incremented */ -struct object *find_object( const struct namespace *namespace, const WCHAR *name, size_t len ) +struct object *find_object( const struct namespace *namespace, const WCHAR *name, size_t len, int case_sensitive ) { const struct list *list, *p; if (!name || !len) return NULL; list = &namespace->names[ get_name_hash( namespace, name, len ) ]; - if (namespace->case_sensitive) + LIST_FOR_EACH( p, list ) { - LIST_FOR_EACH( p, list ) + const struct object_name *ptr = LIST_ENTRY( p, const struct object_name, entry ); + if (ptr->len != len) continue; + if (case_sensitive) { - const struct object_name *ptr = LIST_ENTRY( p, const struct object_name, entry ); - if (ptr->len != len) continue; if (!memcmp( ptr->name, name, len )) return grab_object( ptr->obj ); } - } - else - { - LIST_FOR_EACH( p, list ) + else { - const struct object_name *ptr = LIST_ENTRY( p, const struct object_name, entry ); - if (ptr->len != len) continue; if (!strncmpiW( ptr->name, name, len/sizeof(WCHAR) )) return grab_object( ptr->obj ); } } @@ -254,7 +247,7 @@ struct object *find_object( const struct } /* allocate a namespace */ -struct namespace *create_namespace( unsigned int hash_size, int case_sensitive ) +struct namespace *create_namespace( unsigned int hash_size ) { struct namespace *namespace; unsigned int i; @@ -263,7 +256,6 @@ struct namespace *create_namespace( unsi if (namespace) { namespace->hash_size = hash_size; - namespace->case_sensitive = case_sensitive; for (i = 0; i < hash_size; i++) list_init( &namespace->names[i] ); } return namespace; diff -up -x '*.o' wine-rtest/server/object.h wine/server/object.h --- wine-rtest/server/object.h 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/object.h 2005-09-19 12:51:01.000000000 -0600 @@ -29,6 +29,7 @@ #include "wine/server_protocol.h" #include "wine/list.h" +#define IS_CASE_SENSITIVE(a) (((a)&OBJ_CASE_INSENSITIVE)==0) #define IS_INHERIT(a) ((a)&OBJ_INHERIT) #define DEBUG_OBJECTS @@ -96,13 +97,14 @@ extern void *alloc_object( const struct extern const WCHAR *get_object_name( struct object *obj, size_t *len ); extern void dump_object_name( struct object *obj ); extern void *create_named_object( struct namespace *namespace, const struct object_ops *ops, - const WCHAR *name, size_t len ); -extern struct namespace *create_namespace( unsigned int hash_size, int case_sensitive ); + const WCHAR *name, size_t len, int case_sensitive ); +extern struct namespace *create_namespace( unsigned int hash_size ); /* grab/release_object can take any pointer, but you better make sure */ /* that the thing pointed to starts with a struct object... */ extern struct object *grab_object( void *obj ); extern void release_object( void *obj ); -extern struct object *find_object( const struct namespace *namespace, const WCHAR *name, size_t len ); +extern struct object *find_object( const struct namespace *namespace, const WCHAR *name, size_t len, + int case_sensitive ); extern int no_add_queue( struct object *obj, struct wait_queue_entry *entry ); extern int no_satisfied( struct object *obj, struct thread *thread ); extern int no_signal( struct object *obj, unsigned int access ); @@ -117,7 +119,7 @@ extern void dump_objects(void); struct event; -extern struct event *create_event( const WCHAR *name, size_t len, +extern struct event *create_event( const WCHAR *name, size_t len, int case_sensitive, int manual_reset, int initial_state ); extern struct event *get_event_obj( struct process *process, obj_handle_t handle, unsigned int access ); extern void pulse_event( struct event *event ); diff -up -x '*.o' wine-rtest/server/process.c wine/server/process.c --- wine-rtest/server/process.c 2005-09-19 08:17:00.000000000 -0600 +++ wine/server/process.c 2005-09-19 14:02:57.000000000 -0600 @@ -993,7 +993,7 @@ DECL_HANDLER(init_process_done) generate_startup_debug_events( process, req->entry ); set_process_startup_state( process, STARTUP_DONE ); - if (req->gui) process->idle_event = create_event( NULL, 0, 1, 0 ); + if (req->gui) process->idle_event = create_event( NULL, 0, FALSE, 1, 0 ); if (current->suspend + process->suspend > 0) stop_thread( current ); if (process->debugger) set_process_debug_flag( process, 1 ); } diff -up -x '*.o' wine-rtest/server/semaphore.c wine/server/semaphore.c --- wine-rtest/server/semaphore.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/semaphore.c 2005-09-19 13:00:00.000000000 -0600 @@ -59,6 +59,7 @@ static const struct object_ops semaphore static struct semaphore *create_semaphore( const WCHAR *name, size_t len, + int case_sensitive, unsigned int initial, unsigned int max ) { struct semaphore *sem; @@ -68,7 +69,7 @@ static struct semaphore *create_semaphor set_error( STATUS_INVALID_PARAMETER ); return NULL; } - if ((sem = create_named_object( sync_namespace, &semaphore_ops, name, len ))) + if ((sem = create_named_object( sync_namespace, &semaphore_ops, name, len, case_sensitive ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -147,6 +148,7 @@ DECL_HANDLER(create_semaphore) reply->handle = 0; if ((sem = create_semaphore( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), req->initial, req->max ))) { reply->handle = alloc_handle( current->process, sem, req->access, @@ -159,8 +161,8 @@ DECL_HANDLER(create_semaphore) DECL_HANDLER(open_semaphore) { reply->handle = open_object( sync_namespace, get_req_data(), get_req_data_size(), - &semaphore_ops, req->access, - IS_INHERIT( req->attributes ) ); + IS_CASE_SENSITIVE( req->attributes ), &semaphore_ops, + req->access, IS_INHERIT( req->attributes ) ); } /* release a semaphore */ diff -up -x '*.o' wine-rtest/server/timer.c wine/server/timer.c --- wine-rtest/server/timer.c 2005-09-21 14:09:59.000000000 -0600 +++ wine/server/timer.c 2005-09-19 12:56:58.000000000 -0600 @@ -67,11 +67,12 @@ static const struct object_ops timer_ops /* create a timer object */ -static struct timer *create_timer( const WCHAR *name, size_t len, int manual ) +static struct timer *create_timer( const WCHAR *name, size_t len, int case_sensitive, + int manual ) { struct timer *timer; - if ((timer = create_named_object( sync_namespace, &timer_ops, name, len ))) + if ((timer = create_named_object( sync_namespace, &timer_ops, name, len, case_sensitive ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -205,7 +206,8 @@ DECL_HANDLER(create_timer) struct timer *timer; reply->handle = 0; - if ((timer = create_timer( get_req_data(), get_req_data_size(), req->manual ))) + if ((timer = create_timer( get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), req->manual ))) { reply->handle = alloc_handle( current->process, timer, req->access, IS_INHERIT( req->attributes ) ); @@ -217,6 +219,7 @@ DECL_HANDLER(create_timer) DECL_HANDLER(open_timer) { reply->handle = open_object( sync_namespace, get_req_data(), get_req_data_size(), + IS_CASE_SENSITIVE( req->attributes ), &timer_ops, req->access, IS_INHERIT( req->attributes ) ); } diff -up -x '*.o' wine-rtest/server/winstation.c wine/server/winstation.c --- wine-rtest/server/winstation.c 2005-07-11 12:05:50.000000000 -0600 +++ wine/server/winstation.c 2005-09-19 12:58:40.000000000 -0600 @@ -83,7 +83,7 @@ static struct winstation *create_winstat { struct winstation *winstation; - if (!winstation_namespace && !(winstation_namespace = create_namespace( 7, FALSE ))) + if (!winstation_namespace && !(winstation_namespace = create_namespace( 7 ))) return NULL; if (memchrW( name, '\\', len / sizeof(WCHAR) )) /* no backslash allowed in name */ @@ -92,7 +92,7 @@ static struct winstation *create_winstat return NULL; } - if ((winstation = create_named_object( winstation_namespace, &winstation_ops, name, len ))) + if ((winstation = create_named_object( winstation_namespace, &winstation_ops, name, len, FALSE ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -181,7 +181,7 @@ static struct desktop *create_desktop( c if (!(full_name = build_desktop_name( name, len, winstation, &full_len ))) return NULL; - if ((desktop = create_named_object( winstation_namespace, &desktop_ops, full_name, full_len ))) + if ((desktop = create_named_object( winstation_namespace, &desktop_ops, full_name, full_len, FALSE ))) { if (get_error() != STATUS_OBJECT_NAME_COLLISION) { @@ -322,7 +322,7 @@ DECL_HANDLER(open_winstation) { if (winstation_namespace) reply->handle = open_object( winstation_namespace, get_req_data(), get_req_data_size(), - &winstation_ops, req->access, req->inherit ); + FALSE, &winstation_ops, req->access, req->inherit ); else set_error( STATUS_OBJECT_NAME_NOT_FOUND ); } @@ -395,7 +395,7 @@ DECL_HANDLER(open_desktop) if ((full_name = build_desktop_name( get_req_data(), get_req_data_size(), winstation, &full_len ))) { - reply->handle = open_object( winstation_namespace, full_name, full_len, + reply->handle = open_object( winstation_namespace, full_name, full_len, FALSE, &desktop_ops, req->access, req->inherit ); free( full_name ); }