X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Ffifo.c;h=cbbd1074a41109f41d98c9fd46ab296add31d892;hb=02cbaac1233be9c5228973a787431fa5e0aa178e;hp=7bb4ca3784f595a6bb47ccadd8af9c1ecb86c0ce;hpb=bf7d1cd5635d41bd7c58bf99c61cdc670291c543;p=tpg%2Facess2.git diff --git a/Kernel/drv/fifo.c b/Kernel/drv/fifo.c index 7bb4ca37..cbbd1074 100644 --- a/Kernel/drv/fifo.c +++ b/Kernel/drv/fifo.c @@ -25,10 +25,10 @@ typedef struct sPipe { int FIFO_Install(char **Arguments); int FIFO_IOCtl(tVFS_Node *Node, int Id, void *Data); char *FIFO_ReadDir(tVFS_Node *Node, int Id); -tVFS_Node *FIFO_FindDir(tVFS_Node *Node, char *Filename); - int FIFO_MkNod(tVFS_Node *Node, char *Name, Uint Flags); +tVFS_Node *FIFO_FindDir(tVFS_Node *Node, const char *Filename); + int FIFO_MkNod(tVFS_Node *Node, const char *Name, Uint Flags); void FIFO_Close(tVFS_Node *Node); - int FIFO_Relink(tVFS_Node *Node, char *OldName, char *NewName); + int FIFO_Relink(tVFS_Node *Node, const char *OldName, const char *NewName); Uint64 FIFO_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); Uint64 FIFO_Write(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer); tPipe *FIFO_Int_NewPipe(int Size, char *Name); @@ -38,6 +38,7 @@ MODULE_DEFINE(0, 0x0032, FIFO, FIFO_Install, NULL, NULL); tDevFS_Driver gFIFO_DriverInfo = { NULL, "fifo", { + .Size = 1, .NumACLs = 1, .ACLs = &gVFS_ACL_EveryoneRW, .Flags = VFS_FFLAG_DIRECTORY, @@ -62,7 +63,7 @@ tPipe *gFIFO_NamedPipes = NULL; int FIFO_Install(char **Options) { DevFS_AddDevice( &gFIFO_DriverInfo ); - return MODULE_INIT_SUCCESS; + return MODULE_ERR_OK; } /** @@ -80,6 +81,7 @@ int FIFO_IOCtl(tVFS_Node *Node, int Id, void *Data) char *FIFO_ReadDir(tVFS_Node *Node, int Id) { tPipe *tmp = gFIFO_NamedPipes; + // Entry 0 is Anon Pipes if(Id == 0) return strdup("anon"); @@ -92,11 +94,11 @@ char *FIFO_ReadDir(tVFS_Node *Node, int Id) } /** - * \fn tVFS_Node *FIFO_FindDir(tVFS_Node *Node, char *Filename) + * \fn tVFS_Node *FIFO_FindDir(tVFS_Node *Node, const char *Filename) * \brief Find a file in the FIFO root * \note Creates an anon pipe if anon is requested */ -tVFS_Node *FIFO_FindDir(tVFS_Node *Node, char *Filename) +tVFS_Node *FIFO_FindDir(tVFS_Node *Node, const char *Filename) { tPipe *tmp; if(!Filename) return NULL; @@ -124,9 +126,9 @@ tVFS_Node *FIFO_FindDir(tVFS_Node *Node, char *Filename) } /** - * \fn int FIFO_MkNod(tVFS_Node *Node, char *Name, Uint Flags) + * \fn int FIFO_MkNod(tVFS_Node *Node, const char *Name, Uint Flags) */ -int FIFO_MkNod(tVFS_Node *Node, char *Name, Uint Flags) +int FIFO_MkNod(tVFS_Node *Node, const char *Name, Uint Flags) { return 0; } @@ -154,10 +156,10 @@ void FIFO_Close(tVFS_Node *Node) } /** - * \fn int FIFO_Relink(tVFS_Node *Node, char *OldName, char *NewName) + * \fn int FIFO_Relink(tVFS_Node *Node, const char *OldName, const char *NewName) * \brief Relink a file (Deletes named pipes) */ -int FIFO_Relink(tVFS_Node *Node, char *OldName, char *NewName) +int FIFO_Relink(tVFS_Node *Node, const char *OldName, const char *NewName) { tPipe *pipe, *tmp; @@ -216,9 +218,12 @@ Uint64 FIFO_Read(tVFS_Node *Node, Uint64 Offset, Uint64 Length, void *Buffer) while(remaining) { // Wait for buffer to fill - if(pipe->Flags & PF_BLOCKING) - while(pipe->ReadPos == pipe->WritePos) + if(pipe->Flags & PF_BLOCKING) { + while(pipe->ReadPos == pipe->WritePos) { Threads_Yield(); + //MAGIC_BREAK(); + } + } else if(pipe->ReadPos == pipe->WritePos) return 0; @@ -325,6 +330,7 @@ tPipe *FIFO_Int_NewPipe(int Size, char *Name) memset(ret, 0, allocsize); ret->Name = Name; + ret->Flags = PF_BLOCKING; // Allocate Buffer ret->BufSize = Size;