diff --git a/reactos/subsys/psxss/api.c b/reactos/subsys/psxss/api.c index 39905b338d3..78dddf4e7e5 100644 --- a/reactos/subsys/psxss/api.c +++ b/reactos/subsys/psxss/api.c @@ -1,30 +1,61 @@ -/* $Id: api.c,v 1.1 1999/07/17 23:10:30 ea Exp $ +/* $Id: api.c,v 1.2 1999/09/07 17:12:39 ea Exp $ * * reactos/subsys/psxss/api.c * * ReactOS Operating System * + * -------------------------------------------------------------------- * + * This software is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write + * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + * MA 02139, USA. + * + * -------------------------------------------------------------------- */ #include -#include -#include "api.h" +#include +#include "api/api.h" BOOL TerminationRequestPending = FALSE; -long -port_dispatcher_api( +LPC_RETURN_CODE +PortRequestDispatcher_PsxApi ( PLPC_REQUEST_REPLY pLpcRequestReply ) { switch (pLpcRequestReply->Function) { - case LPC_PSX_API_PROCESS_CREATE: + /* PROCESS Management */ + case PSX_SS_API_PROCESS_CREATE: return POSIX_PROCESS_Create(pLpcRequestReply); - case LPC_PSX_API_PROCESS_TERMINATE: + + case PSX_SS_API_PROCESS_TERMINATE: return POSIX_PROCESS_Terminate(pLpcRequestReply); + + /* THREAD Management */ + case PSX_SS_API_THREAD_CREATE: + return POSIX_THREAD_Create(pLpcRequestReply); + + case PSX_SS_API_THREAD_TERMINATE: + return POSIX_THREAD_Terminate(pLpcRequestReply); + + /* Subsystem Control */ + case PSX_SS_API_SUBSYSTEM_SHUTDOWN: + return POSIX_SS_Shutdown(pLpcRequestReply); } return LPC_ERROR_INVALID_FUNCTION; } + /* EOF */ diff --git a/reactos/subsys/psxss/init.c b/reactos/subsys/psxss/init.c index 99f2ae723d9..26a997e5462 100644 --- a/reactos/subsys/psxss/init.c +++ b/reactos/subsys/psxss/init.c @@ -1,12 +1,30 @@ -/* $Id: init.c,v 1.1 1999/07/17 23:10:31 ea Exp $ +/* $Id: init.c,v 1.2 1999/09/07 17:12:39 ea Exp $ * * init.c * * ReactOS Operating System * + * -------------------------------------------------------------------- + * + * This software is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write + * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + * MA 02139, USA. + * + * -------------------------------------------------------------------- */ +#define PROTO_LPC #include -#include struct _SERVER_DIRECTORIES { @@ -110,7 +128,7 @@ Thread_SbApi(void * pPort) * when the Interix(tm) subsystem is installed. */ BOOL -InitializeServer(void) +InitializeServer (void) { NTSTATUS Status; OBJECT_ATTRIBUTES ObAttributes; @@ -125,40 +143,74 @@ InitializeServer(void) PSXSS_DIRECTORY_NAME_ROOT & Server.Directory.Root ); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } /* * STEP 2 * Create the LPC port "\PSXSS\ApiPort" * */ - Server.Api.Port = - NtCreatePort( - PSXSS_PORT_NAME_APIPORT, - ... + ObAttributes.Name = PSXSS_PORT_NAME_APIPORT; + Status = NtCreatePort( + & Server.Api.Port, + & ObAttributes, + 0, + 0, + 0, + 0 ); - NtCreateThread( - & Server.Api.Thread, - 0, /* desired access */ - & ObAttributes, /* object attributes */ - NtCurrentProcess(), /* process' handle */ - 0, /* client id */ - Thread_ApiPort, - (void*) & Server.Api.Port - ); + if (!NT_SUCCESS(Status)) + { + return FALSE; + } + Status = NtCreateThread( + & Server.Api.Thread, + 0, /* desired access */ + & ObAttributes, /* object attributes */ + NtCurrentProcess(), /* process' handle */ + 0, /* client id */ + Thread_ApiPort, + (void*) & Server.Api.Port + ); + if (!NT_SUCCESS(Status)) + { + NtClose(Server.Api.Port); + return FALSE; + } /* * STEP 3 * Create the LPC port "\PSXSS\SbApiPort" * */ - Server.SbApi.Port = - NtCreatePort( - PSXSS_PORT_NAME_SBAPIPORT, - ... + ObAttributes.Name = PSXSS_PORT_NAME_SBAPIPORT; + Status = NtCreatePort( + & Server.SbApi.Port, + & ObAttributes, + 0, + 0, + 0, + 0 ); + if (!NT_SUCCESS(Status)) + { + NtClose(Server.Api.Port); + NtTerminateThread(/*FIXME*/); + return FALSE; + } Status = NtCreateThread( & Server.SbApi.Thread, Thread_SbApi, (void*) & Server.SbApi.Port ); + if (!NT_SUCCESS(Status)) + { + NtClose(Server.Api.Port); + NtTerminateThread(/*FIXME*/); + NtClose(Server.SbApi.Port); + return FALSE; + } /* * STEP 4 * Create the POSIX+ session directory object @@ -169,6 +221,13 @@ InitializeServer(void) PSXSS_DIRECTORY_NAME_SESSIONS & Server.Directory.Sessions ); + if (!NT_SUCCESS(Status)) + { + NtClose(Server.Api.Port); + NtTerminateThread(Server.Api.Thread); + NtClose(Server.SbApi.Port); + NtTerminateThread(Server.SbApi.Thread); + return FALSE; /* * STEP 5 * Create the POSIX+ system directory object diff --git a/reactos/subsys/psxss/makefile b/reactos/subsys/psxss/makefile index 2f731b33dcf..6ae4c5d4e1a 100644 --- a/reactos/subsys/psxss/makefile +++ b/reactos/subsys/psxss/makefile @@ -1,14 +1,16 @@ -# $Id: makefile,v 1.2 1999/08/29 13:45:07 dwelch Exp $ +# $Id: makefile,v 1.3 1999/09/07 17:12:39 ea Exp $ # -# CSRSS: Client/server run-time subsystem +# PSXSS: POSIX+ Subsystem server process # # ReactOS Operating System # -TARGET=csrss +TARGET=psxss -BASE_CFLAGS = -I../../include +OBJECTS_API = api/process.o api/thread.o api/subsys.o -OBJECTS = $(TARGET).o init.o $(TARGET).coff +OBJECTS_MISC = $(TARGET).o init.o $(TARGET).coff + +OBJECTS = $(OBJECTS_MISC) $(OBJECTS_API) LIBS = ../../lib/ntdll/ntdll.a @@ -17,10 +19,11 @@ all: $(TARGET).exe .phony: all clean: - - $(RM) $(TARGET).o + - $(RM) *.o - $(RM) $(TARGET).exe - $(RM) $(TARGET).sym - $(RM) $(TARGET).coff + - $(RM) api/*.o .phony: clean diff --git a/reactos/subsys/psxss/psxss.c b/reactos/subsys/psxss/psxss.c index 66b4d799822..ca2b1e10670 100644 --- a/reactos/subsys/psxss/psxss.c +++ b/reactos/subsys/psxss/psxss.c @@ -1,4 +1,4 @@ -/* $Id: psxss.c,v 1.1 1999/07/17 23:10:31 ea Exp $ +/* $Id: psxss.c,v 1.2 1999/09/07 17:12:39 ea Exp $ * * reactos/subsys/psxss/psxss.c * @@ -16,10 +16,10 @@ * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. + * General Public License for more details. * * You should have received a copy of the GNU General Public License - * along with this software; see the file COPYING.LIB. If not, write + * along with this software; see the file COPYING. If not, write * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, * MA 02139, USA. * diff --git a/reactos/subsys/psxss/sbapi.c b/reactos/subsys/psxss/sbapi.c index 72bbbaf8018..c989e8a1084 100644 --- a/reactos/subsys/psxss/sbapi.c +++ b/reactos/subsys/psxss/sbapi.c @@ -1,18 +1,35 @@ -/* $Id: sbapi.c,v 1.1 1999/07/17 23:10:31 ea Exp $ +/* $Id: sbapi.c,v 1.2 1999/09/07 17:12:39 ea Exp $ * * sbapi.c - Displatcher for the \SbApiPort * * ReactOS Operating System * + * -------------------------------------------------------------------- * + * This software is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of the + * License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; see the file COPYING. If not, write + * to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, + * MA 02139, USA. + * + * -------------------------------------------------------------------- */ +#define PROTO_LPC #include -#include /* The \SbApi dispatcher: what is this port for? */ LPC_RETURN_CODE -port_dispatcher_sbapi( +PortRequestDispatcher_PsxSbApi ( PLPC_REQUEST_REPLY pLpcRequestReply ) {