summaryrefslogtreecommitdiffstats
path: root/winsup/cygwin/include
diff options
context:
space:
mode:
authorRobert Collins <rbtcollins@hotmail.com>2002-02-28 14:30:38 +0000
committerRobert Collins <rbtcollins@hotmail.com>2002-02-28 14:30:38 +0000
commitf449bfef408685a2e4c0fc40c601c584fbc7bc82 (patch)
tree90167807132514f02fd751fbbae71e3b09c2fa65 /winsup/cygwin/include
parent062401c9b4bf8a203d7e694194307d84e351fce0 (diff)
downloadcygnal-f449bfef408685a2e4c0fc40c601c584fbc7bc82.tar.gz
cygnal-f449bfef408685a2e4c0fc40c601c584fbc7bc82.tar.bz2
cygnal-f449bfef408685a2e4c0fc40c601c584fbc7bc82.zip
2002-02-28 Robert Collins <rbtcollins@hotmail.com>
* Merged cygwin_daemon into head minus the new shm and ipc exports. 2002-02-28 Robert Collins <rbtcollins@hotmail.com> * fhandler_tty.cc (fhandler_tty_slave::open): More debugging. (fhandler_tty_slave::read): Fix printf type for the handle. * tty.cc (tty::common_init): Add a FIXME for security. 2002-01-29 Robert Collins <rbtcollins@hotmail.com> * Makefile.in (OBJS): Remove duplicate localtime.o. 2002-01-17 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (check_and_dup_handle): Consolidate the two variants for simplicity. Add Some basic debug output. (client_request_attach_tty::serve): Use the new debug_printf for clarity. Mark the duplicated handles as inheritable - fixup_after_fork() doesn't reopen tty's. 2002-01-16 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (transport): Correct scope. (client_request_attach_tty::serve): Add more debug information. Fix erroneous use of transport instead of conn. * cygserver_transport_pipes.cc (transport_layer_pipes::close): More debug. (transport_layer_pipes::read): Ditto. (transport_layer_pipes::write): Ditto. (transport_layer_pipes::impersonate_client): Ditto. Mon Oct 8 7:41:00 2001 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (server_request::process): Rename client_request_shm_get to client_request_shm. * cygserver_process.cc (process_cache::add): Rename to add_task. Use process_cleanup instead of process_request. (process_cache::remove_process): New method. (process::process): Initialize new members. (process::~process): New member. (process::cleanup): New method. (process::add_cleanup_routine): New method. (process_request::process): Rename to process_cleanup. Call the process object's cleanup method and then delete it. (process_process_param::request_loop): Remove the signalling process. * cygserver_shm.cc: Globally rename client_request_shm_get to client_request_shm. (client_request_shm_get::serve): Handle attach request counting. * cygserver_shm.h: Globally rename client_request_shm_get to client_request_shm. (class shm_cleanup): New class. * shm.cc: Globally rename client_request_shm_get to client_request_shm. (client_request_shm::client_request_shm): New constructor for attach requests. (shmat): Use it. * include/cygwin/cygserver_process.h (class process_request): Rename to process_cleanup. (class cleanup_routine): New class. (class process): New members and methods to allow calling back when the process terminates. Thu Oct 4 14:12:00 2001 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (request_loop): Make static. (main): Use new cache constructor syntax. Start cache worker threads. Cleanup the cache at shutdown. * cygserver_process.cc: Run indent. (process_cache::process_cache): Add a trigger to use when adding a process. (process_cache::process): Move process_entry to process. Insert at the end of the list. Trigger the request loop when new process's inserted. (process_cache::process_requests): Do it. (process_cache::add): New method. (process_cache::handle_snapshot): New method. (process::process): Merge in the process_entry fields. (process::handle): Make a stub function. (process::exit_code): New method. (process_request::process): New method. (process_process_param::request_loop): New method. * cygserver_shm.cc: New header dependency - threaded_queue.h. * threaded_queue.cc (threaded_queue::cleanup): Clearer messages. (queue_process_param::stop): Short spinlock on interruptible threads. * threaded_queue.h (class threaded_queue): New constructor. * include/cygwin/cygserver_process.h (process_request): New class. (process_entry): Remove. (process): Merge in process_entry. (process_cache): Inherit from threaded_queue. Tue Oct 2 23:24:00 2001 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (class server_process_param): Use new constructor syntax. * cygserver_process.cc (process_cache::~process_cache): New function. * threaded_queue.cc: Define condition debug_printf. Run indent. (threaded_queue::cleanup): Move queue_process_param guts to a method. (threaded_queue::process_requests): Ditto. (queue_process_param::queue_process_param): New method. (queue_process_param::~queue_process_param): Ditto. (queue_process_param::start): Ditto. (queue_process_param::stop): Ditto. * threaded_queue.h (class queue_process_param): Add support for interruptible request loops. * cygwin/include/cygwin/cygserver_process.h (class process_cache): Add destructor. Tue Oct 2 23:24:00 2001 Robert Collins <rbtcollins@hotmail.com> * cygserver_client.cc: New flag allow_daemon to disable the daemon completely. (cygserver_request): Check it. (cygserver_init): Ditto. * environ.cc (parse_thing): Add (no)daemon option. Tue Oct 2 23:00:00 2001 Robert Collins <rbtcollins@hotmail.com> * shm.cc: Update to handle include changes from HEAD. Tue Oct 2 16:06:00 2001 Robert Collins <rbtcollins@hotmail.com> * Makefile.in: Remove cygserver_shm.o from cygwin1.dll. Rename cygserver_shm_outside.o to cygserver_shm.o. * cygserver.cc (server_request::process): Use the new client_request constructor. * cygserver_client.cc: Remove the #ifdef's stubs for the server method within cygwin. (client_request_attach_tty::client_request_attach_tty): Use the new client_request constructor. (client_request_shutdown::client_request_shutdown): Ditto. (client_request::client_request): Ditto. * cygserver_shm.cc (client_request_shm_get::serve): Remove the #ifdef'd stub for in-cygwin builds. (client_request_shm_get::client_request_shm_get): Use the new client_request constructor, and remove the in-cygwin variants. * cygserver_shm.h (class client_request_shm_get): #ifndef test the serve method - it's only used in cygserver. * shm.cc (client_request_shm_get::client_request_shm_get): New function. * include/cygwin/cygserver.h (request_header): New constructor. (class client_request): Use it. New constructor accepting the header size. #ifndef test the server method - it's only used within cygserver. (client_request_get_version): #ifdef test the server method. (client_request_shutdown): Ditto. (client_request_attach_tty): Ditto. Tue Oct 2 9:57:00 2001 Robert Collins <rbtcollins@hotmail.com> * Makefile.in: add threaded_queue.o to cygserver.exe. * cygserver.cc: Include threaded_queue.h (class server_request): Inherit from queue_request. (class server_process_param): Inherit from queue_process_param. (class server_request_queue): Inherit from threaded_queue. (request_loop): Adjust for new types. (server_request_queue::process_requests): Remove guts to threaded_queue::process_requests. (server_request::server_request): Adjust for new types. (worker_function): Delete. (server_request_queue::create_workers): Delete. (server_request_queue::cleanup): Delete. (server_request_queue::add): Move guts to threaded_queue::add. * threaded_queue.cc: New file. * threaded_queue.h: New file. Mon Oct 1 12:38:00 2001 Robert Collins <rbtcollins@hotmail.com> * cygserver.cc (client_request::serve): New function. * cygserver_process.cc: Inlude <pthread.h> for pthread_once. (process_cache::process_cache): Initialise a crtiical section for write access. (process_cache::process): Use the critical section. Also add missing entries to the cache. (do_process_init): New function to initalise class process static variables. (process::process): Ensure that the process access critical section is initialised. (process::handle): Close the handle of old process's when they have terminated and we are returning the handle for a process with the same pid. * cygserver_shm.cc: Run indent. Include cygserver_process.h to allow process cache functionality. (client_request_shm_get::serve): New parameter for process cache support. Use the process cache, not OpenProcess to get a handle to the originating process. Fix a handle leak with token_handle. * cygserver_shm.h (class client_request_shm_get): Update ::serve for process cache support. * cygserver_transport_pipes.cc: Redefine debug_printf to be conditional on DEBUG. * include/cygwin/cygserver.h: Do not implement client_request::serve in the header. * include/cygwin/cygserver_process.h (class process_cache): Add a write access critical section to prevent races when requests from a multithreaded application arrive. Sun Sep 30 23:41:00 2001 Robert Collins <rbtcollins@hotmail.com> * Makefile.in: Add cygserver_process.o to cygserver.exe. * cygserver.cc: Include signal.h and cygwin_version.h. Define debug_printf as a macro. Define DEBUG to a value. (client_request_attach_tty::serve): Add beginning of process cache support. Change from #ifdef DEBUG to work with new DEBUG style. (client_request_get_version::serve): Add beginning of process cache support. (class server_request): New prototype for support of process cache. (class queue_process_param): New class to allow request loop threading. (class server_request_queue): Add beginning of process cache support. Allow request loop threading. (request_loop): Thread function for request loops. (server_request_queue::process_requests): Initiator for threaded request loops. (client_request_shutdown::serve): Add beginning of process cache support. (server_request::server_request): Ditto. (server_request::process): Use debug_printf. Add beginning of process cache support. (server_request_queue::cleanup): Kill off any request loop threads. (server_request_queue::add): Add beginning of process cache support. (handle_signal): Trigger a shutdown. (main): Print out some useful info at startup - version, date time. Add process cache support. Spawn a separate thread for the transport request loop, thus allowing concurrent support for multiple transports. * cygserver_client.cc (client_request_get_version::serve): Add process cache support. (client_request_attach_tty::serve): Add process cache support. (client_request_shutdown::serve): Add process cache support. * cygsserver_process.cc: New file with the process cache support. * cygserver_shm.cc: Redefine debug_printf to allow conditional output. * cygwin.din: Export shmdt(). * shm.cc: Run indent. Update FIXME's. (shmdt): New function. * include/cygwin/cygserver.h (class client_request): Add process cache support. (class client_request_get_version): Ditto. (class client_request_shutdown): Ditto. (class client_request_attach_tty): Ditto. * include/cygwin/cygserver_process.h: New header for process cache support. Sun Sep 30 8:52:00 2001 Robert Collins <rbtcollins@hotmail.com> * include/cygwin/cygserver_transport.h: Add copyright header. * include/cygwin/cygserver_transport_pipes.h: Ditto. * include/cygwin/cygserver_transport_sockets.h: Ditto. Sat Sep 29 20:40:00 2001 Robert Collins <rbtcollins@hotmail.com> * Makefile.in: Add cygserver_transport_sockets.o to DLL_OFILES. Add cygserver_transport_sockets_outside.o to cygserver.exe. * cygserver.cc: Include new include files. * cygserver_client.cc: Ditto. * cygserver_shm.h: No need to include <sys/socket.h> now. * cygerver_transport.cc: Include new include files. (transport_layer_base::transport_layer_base): Strip back to a stub. (transport_layer_base::listen): Ditto. (transport_layer_base::accept): Ditto. (transport_layer_base::close): Ditto. (transport_layer_base::read): Ditto. (transport_layer_base::write): Ditto. (transport_layer_base::connect): Ditto. * cygserver_transport_pipes.cc: Include new header "cygwin/cygserver_transport_pipes.h". * cygserver_transport_sockets.cc: New file. * dcrt0.cc: No need to include <sys/socket.h> now. * fhandler_tty.cc: Ditto. * tty.cc: Ditto. * include/cygwin/cygserver_transport.h: Strip the base class to a stub. Remove the cygserver_transport_pipes class. * include/cygwin/cygserver_transport_pipes.h: New file. * include/cygwin/cygserver_transport_sockets.h: New file. Tue Sep 25 16:22:00 2001 Robert Collins <rbtcollins@hotmail.com> * autoload.cc: Add dynamic load statement for 'ImpersonateNamedPipeClient'. * Makefile.in: Add new object files, and build instructions for cygserver.exe. * cygwin.din: Export ftok, shmat, shmctl and shmget. * dcrt0.cc: Additional includes for cygserver support. (dll_crt0_1): Initialise the cygserver client. * fhandler.h (fhandler_tty): New method cygserver_attach_tty. * fhandler_tty.cc: Additional includes for cygserver support. (fhandler_tty_slave::open): Attempt to use the cygserver when obtaining handles from the parent process. On failure or 9x use the current method. (fhandler_tty_slave::cygserver_attach_tty): New function. * fork.cc (fork_child): Fixup shm memory mapped areas. * pinfo.h: Declare fixup_shms_after_fork(). * security.h: Declare alloc_sd(). * tty.cc: Additonal includes to support cygserver. (tty::common_init): Don't allow others to open us if the cygserver is running. * winsup.h: Declare cygserver_running. * cygserver.cc: New file. * cygserver_client.cc: New file. * cygserver_shm.cc: New file. * cygserver_shm.h: New file. * cygserver_transport.cc: New file. * cygserver_transport_pipes.cc: New file. * ipc.cc: New file. * shm.cc: New file. * include/cygwin/cygserver.h: New file. * include/cygwin/cygserver_transport.h: New file. * include/sys/ipc.h: New file. * include/sys/shm.h: New file. 2002-02-28 Robert Collins <rbtcollins@hotmail.com> * thread.cc (semaphore::TryWait): Set errno as required by posix 1003.1. (__sem_wait): Ditto. (__sem_trywait): Ditto.
Diffstat (limited to 'winsup/cygwin/include')
-rwxr-xr-xwinsup/cygwin/include/cygwin/cygserver.h135
-rwxr-xr-xwinsup/cygwin/include/cygwin/cygserver_process.h84
-rwxr-xr-xwinsup/cygwin/include/cygwin/cygserver_transport.h32
-rwxr-xr-xwinsup/cygwin/include/cygwin/cygserver_transport_pipes.h39
-rwxr-xr-xwinsup/cygwin/include/cygwin/cygserver_transport_sockets.h33
-rw-r--r--winsup/cygwin/include/fnmatch.h38
-rw-r--r--winsup/cygwin/include/sys/ipc.h52
-rw-r--r--winsup/cygwin/include/sys/shm.h89
8 files changed, 484 insertions, 18 deletions
diff --git a/winsup/cygwin/include/cygwin/cygserver.h b/winsup/cygwin/include/cygwin/cygserver.h
new file mode 100755
index 000000000..3751863f5
--- /dev/null
+++ b/winsup/cygwin/include/cygwin/cygserver.h
@@ -0,0 +1,135 @@
+/* cygserver.h
+
+ Copyright 2001 Red Hat Inc.
+
+ Written by Egor Duda <deo@logos-m.ru>
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _CYGSERVER_H_
+#define _CYGSERVER_H_
+
+#define MAX_REQUEST_SIZE 128
+
+#define CYGWIN_SERVER_VERSION_MAJOR 1
+#define CYGWIN_SERVER_VERSION_API 1
+#define CYGWIN_SERVER_VERSION_MINOR 0
+#define CYGWIN_SERVER_VERSION_PATCH 0
+
+
+typedef enum {
+ CYGSERVER_UNKNOWN=0,
+ CYGSERVER_OK=1,
+ CYGSERVER_DEAD=2
+} cygserver_states;
+
+typedef enum {
+ CYGSERVER_REQUEST_INVALID = 0,
+ CYGSERVER_REQUEST_GET_VERSION,
+ CYGSERVER_REQUEST_ATTACH_TTY,
+ CYGSERVER_REQUEST_SHUTDOWN,
+ CYGSERVER_REQUEST_SHM_GET,
+ CYGSERVER_REQUEST_LAST
+} cygserver_request_code;
+
+class request_header
+{
+ public:
+ ssize_t cb;
+ cygserver_request_code req_id;
+ ssize_t error_code;
+ request_header (cygserver_request_code id, ssize_t ncb) : cb (ncb), req_id (id), error_code (0) {} ;
+}
+#ifdef __GNUC__
+ __attribute__ ((packed))
+#endif
+;
+
+extern void cygserver_init ();
+
+#define INIT_REQUEST(req,id) \
+ (req).header.cb = sizeof (req); \
+ (req).header.req_id = id;
+
+struct request_get_version
+{
+ DWORD major, api, minor, patch;
+}
+#ifdef __GNUC__
+ __attribute__ ((packed))
+#endif
+;
+
+struct request_shutdown
+{
+ int foo;
+}
+#ifdef __GNUC__
+ __attribute__ ((packed))
+#endif
+;
+
+struct request_attach_tty
+{
+ DWORD pid, master_pid;
+ HANDLE from_master, to_master;
+}
+#ifdef __GNUC__
+ __attribute__ ((packed))
+#endif
+;
+
+class client_request
+{
+ public:
+ client_request (cygserver_request_code id, ssize_t data_size);
+ virtual void send (transport_layer_base *conn);
+#ifndef __INSIDE_CYGWIN__
+ virtual void serve (transport_layer_base *conn, class process_cache *cache);
+#endif
+ virtual operator struct request_header ();
+ cygserver_request_code req_id () {return header.req_id;};
+ virtual ~client_request();
+ request_header header;
+ char *buffer;
+};
+
+class client_request_get_version : public client_request
+{
+ public:
+#ifndef __INSIDE_CYGWIN__
+ virtual void serve (transport_layer_base *conn, class process_cache *cache);
+#endif
+ client_request_get_version::client_request_get_version();
+ struct request_get_version version;
+};
+
+class client_request_shutdown : public client_request
+{
+ public:
+#ifndef __INSIDE_CYGWIN__
+ virtual void serve (transport_layer_base *conn, class process_cache *cache);
+#endif
+ client_request_shutdown ();
+};
+
+class client_request_attach_tty : public client_request
+{
+ public:
+#ifndef __INSIDE_CYGWIN__
+ virtual void serve (transport_layer_base *conn, class process_cache *cache);
+#endif
+ client_request_attach_tty ();
+ client_request_attach_tty (DWORD npid, DWORD nmaster_pid, HANDLE nfrom_master, HANDLE nto_master);
+ HANDLE from_master () {return req.from_master;};
+ HANDLE to_master () {return req.to_master;};
+ struct request_attach_tty req;
+};
+
+extern int cygserver_request (client_request *);
+
+#endif /* _CYGSERVER+H+ */
diff --git a/winsup/cygwin/include/cygwin/cygserver_process.h b/winsup/cygwin/include/cygwin/cygserver_process.h
new file mode 100755
index 000000000..4a49212b2
--- /dev/null
+++ b/winsup/cygwin/include/cygwin/cygserver_process.h
@@ -0,0 +1,84 @@
+/* cygserver_process.h
+
+ Copyright 2001 Red Hat Inc.
+
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+#ifndef _CYGSERVER_PROCESS_
+#define _CYGSERVER_PROCESS_
+
+/* needs threaded_queue.h */
+
+class process_cleanup:public queue_request
+{
+public:
+ virtual void process ();
+ process_cleanup (class process *nprocess) : theprocess (nprocess) {};
+private:
+ class process * theprocess;
+};
+
+class process_process_param:public queue_process_param
+{
+ class process_cache *cache;
+public:
+ DWORD request_loop ();
+ process_process_param ():queue_process_param (true) {};
+};
+
+class cleanup_routine
+{
+public:
+ cleanup_routine () : next (NULL) {};
+ class cleanup_routine * next;
+ /* MUST BE SYNCHRONOUS */
+ virtual void cleanup (long winpid);
+};
+
+class process
+{
+public:
+ HANDLE handle ();
+ long winpid;
+ process (long);
+ ~process ();
+ DWORD exit_code ();
+ class process * next;
+ long refcount;
+ bool add_cleanup_routine (class cleanup_routine *);
+ void cleanup ();
+private:
+ /* used to prevent races-on-delete */
+ CRITICAL_SECTION access;
+ volatile long cleaning_up;
+ class cleanup_routine *head;
+ HANDLE thehandle;
+ DWORD _exit_status;
+};
+
+class process_cache:public threaded_queue
+{
+public:
+ process_cache (unsigned int initial_workers);
+ virtual ~ process_cache ();
+ class process *process (long);
+ /* remove a process from the cache */
+ int handle_snapshot (HANDLE *, class process **, ssize_t, int);
+ void remove_process (class process *);
+ /* threaded_queue methods */
+ void process_requests ();
+ HANDLE cache_add_trigger;
+
+private:
+ virtual void add_task (class process *);
+ class process *head;
+ CRITICAL_SECTION cache_write_access;
+};
+
+#endif /* _CYGSERVER_PROCESS_ */
diff --git a/winsup/cygwin/include/cygwin/cygserver_transport.h b/winsup/cygwin/include/cygwin/cygserver_transport.h
new file mode 100755
index 000000000..1ed16edf7
--- /dev/null
+++ b/winsup/cygwin/include/cygwin/cygserver_transport.h
@@ -0,0 +1,32 @@
+/* cygserver.cc
+
+ Copyright 2001 Red Hat Inc.
+
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+#ifndef _CYGSERVER_TRANSPORT_
+#define _CYGSERVER_TRANSPORT_
+class transport_layer_base *create_server_transport();
+
+/* the base class does nothing. */
+class transport_layer_base
+{
+ public:
+ virtual void listen ();
+ virtual class transport_layer_base * accept ();
+ virtual void close ();
+ virtual ssize_t read (char *buf, size_t len);
+ virtual ssize_t write (char *buf, size_t len);
+ virtual bool connect();
+ virtual void impersonate_client ();
+ virtual void revert_to_self ();
+ transport_layer_base ();
+};
+
+#endif /* _CYGSERVER_TRANSPORT_ */
diff --git a/winsup/cygwin/include/cygwin/cygserver_transport_pipes.h b/winsup/cygwin/include/cygwin/cygserver_transport_pipes.h
new file mode 100755
index 000000000..9afeebfef
--- /dev/null
+++ b/winsup/cygwin/include/cygwin/cygserver_transport_pipes.h
@@ -0,0 +1,39 @@
+/* cygserver.cc
+
+ Copyright 2001 Red Hat Inc.
+
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+#ifndef _CYGSERVER_TRANSPORT_PIPES_
+#define _CYGSERVER_TRANSPORT_PIPES_
+/* Named pipes based transport, for security on NT */
+class transport_layer_pipes : public transport_layer_base
+{
+ public:
+ virtual void listen ();
+ virtual class transport_layer_pipes * accept ();
+ virtual void close ();
+ virtual ssize_t read (char *buf, size_t len);
+ virtual ssize_t write (char *buf, size_t len);
+ virtual bool connect();
+ virtual void impersonate_client ();
+ virtual void revert_to_self ();
+ transport_layer_pipes ();
+
+ private:
+ /* for pipe based communications */
+ void init_security ();
+ SECURITY_DESCRIPTOR sd;
+ SECURITY_ATTRIBUTES sec_none_nih, sec_all_nih;
+ char pipe_name [MAX_PATH];
+ HANDLE pipe;
+ bool inited;
+ transport_layer_pipes (HANDLE new_pipe);
+};
+#endif /* _CYGSERVER_TRANSPORT_PIPES_ */
diff --git a/winsup/cygwin/include/cygwin/cygserver_transport_sockets.h b/winsup/cygwin/include/cygwin/cygserver_transport_sockets.h
new file mode 100755
index 000000000..94dc43e38
--- /dev/null
+++ b/winsup/cygwin/include/cygwin/cygserver_transport_sockets.h
@@ -0,0 +1,33 @@
+/* cygserver.cc
+
+ Copyright 2001 Red Hat Inc.
+
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+ This file is part of Cygwin.
+
+ This software is a copyrighted work licensed under the terms of the
+ Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+ details. */
+
+#ifndef _CYGSERVER_TRANSPORT_SOCKETS_
+#define _CYGSERVER_TRANSPORT_SOCKETS_
+class transport_layer_sockets : public transport_layer_base
+{
+ public:
+ virtual void listen ();
+ virtual class transport_layer_sockets * accept ();
+ virtual void close ();
+ virtual ssize_t read (char *buf, size_t len);
+ virtual ssize_t write (char *buf, size_t len);
+ virtual bool connect();
+ transport_layer_sockets ();
+
+ private:
+ /* for socket based communications */
+ int fd;
+ struct sockaddr sockdetails;
+ int sdlen;
+ transport_layer_sockets (int newfd);
+};
+#endif /* _CYGSERVER_TRANSPORT_SOCKETS_ */
diff --git a/winsup/cygwin/include/fnmatch.h b/winsup/cygwin/include/fnmatch.h
index 70a5fec6d..e4500abe2 100644
--- a/winsup/cygwin/include/fnmatch.h
+++ b/winsup/cygwin/include/fnmatch.h
@@ -1,9 +1,9 @@
-/* $OpenBSD: fnmatch.h,v 1.5 2000/03/24 17:13:23 millert Exp $ */
-/* $NetBSD: fnmatch.h,v 1.5 1994/10/26 00:55:53 cgd Exp $ */
+/* $OpenBSD: fnmatch.h,v 1.5 2000/03/24 17:13:23 millert Exp $ */
+/* $NetBSD: fnmatch.h,v 1.5 1994/10/26 00:55:53 cgd Exp $ */
/*-
* Copyright (c) 1992, 1993
- * The Regents of the University of California. All rights reserved.
+ * The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -15,8 +15,8 @@
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
+ * This product includes software developed by the University of
+ * California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
@@ -33,29 +33,31 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93
+ * @(#)fnmatch.h 8.1 (Berkeley) 6/2/93
*/
-#ifndef _FNMATCH_H_
-#define _FNMATCH_H_
+#ifndef _FNMATCH_H_
+#define _FNMATCH_H_
-#define FNM_NOMATCH 1 /* Match failed. */
-#define FNM_NOSYS 2 /* Function not supported (unused). */
+#define FNM_NOMATCH 1 /* Match failed. */
+#define FNM_NOSYS 2 /* Function not supported (unused). */
-#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
-#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
-#define FNM_PERIOD 0x04 /* Period must be matched by period. */
+#define FNM_NOESCAPE 0x01 /* Disable backslash escaping. */
+#define FNM_PATHNAME 0x02 /* Slash must be matched by slash. */
+#define FNM_PERIOD 0x04 /* Period must be matched by period. */
#ifndef _POSIX_SOURCE
-#define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
-#define FNM_CASEFOLD 0x10 /* Case insensitive search. */
-#define FNM_IGNORECASE FNM_CASEFOLD
-#define FNM_FILE_NAME FNM_PATHNAME
+#define FNM_LEADING_DIR 0x08 /* Ignore /<tail> after Imatch. */
+#define FNM_CASEFOLD 0x10 /* Case insensitive search. */
+#define FNM_IGNORECASE FNM_CASEFOLD
+#define FNM_FILE_NAME FNM_PATHNAME
#endif
#include <sys/cdefs.h>
__BEGIN_DECLS
-int fnmatch __P((const char *, const char *, int));
+int fnmatch __P((const char *, const char *, int));
__END_DECLS
#endif /* !_FNMATCH_H_ */
+
+
diff --git a/winsup/cygwin/include/sys/ipc.h b/winsup/cygwin/include/sys/ipc.h
new file mode 100644
index 000000000..8ddec6d50
--- /dev/null
+++ b/winsup/cygwin/include/sys/ipc.h
@@ -0,0 +1,52 @@
+/* sys/ipc.h
+
+ Copyright 2001 Red Hat Inc.
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef _SYS_IPC_H
+#define _SYS_IPC_H
+
+/* sys/types must be included before sys/ipc.h. We aren't meant to automatically
+ * include it however
+ */
+
+struct ipc_perm {
+ uid_t uid;
+ gid_t gid;
+ uid_t cuid;
+ gid_t cgid;
+ mode_t mode;
+};
+
+/* the mode flags used with the _get functions use the low order 9 bits for a mode
+ * request
+ */
+#define IPC_CREAT 0x0200
+#define IPC_EXCL 0x0400
+#define IPC_NOWAIT 0x0800
+
+/* this is a value that will _never_ be a valid key from ftok */
+#define IPC_PRIVATE -2
+
+#define IPC_RMID 0x0003
+#define IPC_SET 0x0002
+#define IPC_STAT 0x0001
+
+key_t ftok(const char *, int);
+
+#endif /* _SYS_IPC_H */
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/winsup/cygwin/include/sys/shm.h b/winsup/cygwin/include/sys/shm.h
new file mode 100644
index 000000000..208c5f29f
--- /dev/null
+++ b/winsup/cygwin/include/sys/shm.h
@@ -0,0 +1,89 @@
+/* sys/shm.h
+
+ Copyright 2001 Red Hat Inc.
+ Written by Robert Collins <rbtcollins@hotmail.com>
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license. Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+
+#ifndef _SYS_SHM_H
+#define _SYS_SHM_H
+
+#include <sys/ipc.h>
+
+#define SHM_RDONLY 1
+/* 64 Kb was hardcoded for x86. MS states this may change, but we need it in the header
+ * file.
+ */
+#define SHMLBA 65536
+#define SHM_RND 1
+
+typedef long int shmatt_t;
+
+#if defined(__INSIDE_CYGWIN__) && defined(__cplusplus)
+
+class _shmattach {
+public:
+ void *data;
+ int shmflg;
+ class _shmattach *next;
+};
+
+class shmid_ds {
+public:
+ struct ipc_perm shm_perm;
+ size_t shm_segsz;
+ pid_t shm_lpid;
+ pid_t shm_cpid;
+ shmatt_t shm_nattch;
+ time_t shm_atime;
+ time_t shm_dtime;
+ time_t shm_ctime;
+ void *mapptr;
+};
+
+class shmnode {
+public:
+ class shmid_ds * shmds;
+ int shm_id;
+ class shmnode *next;
+ key_t key;
+ HANDLE filemap;
+ HANDLE attachmap;
+ class _shmattach *attachhead;
+};
+
+#else
+/* this is what we return when queried. It has no bitwise correspondence
+ * the internal structures
+ */
+struct shmid_ds {
+ struct ipc_perm shm_perm;
+ size_t shm_segsz;
+ pid_t shm_lpid;
+ pid_t shm_cpid;
+ shmatt_t shm_nattch;
+ time_t shm_atime;
+ time_t shm_dtime;
+ time_t shm_ctime;
+};
+#endif /* __INSIDE_CYGWIN__ */
+
+void *shmat(int, const void *, int);
+int shmctl(int, int, struct shmid_ds *);
+int shmdt(const void *);
+int shmget(key_t, size_t, int);
+
+#endif /* _SYS_SHM_H */
+
+#ifdef __cplusplus
+}
+#endif