AcessNative - Changes to allow _compiling_ on windows.
[tpg/acess2.git] / KernelLand / Kernel / messages.c
index afdcdbd..c991978 100644 (file)
@@ -25,7 +25,7 @@ int Proc_SendMessage(Uint Dest, int Length, void *Data)
        tThread *thread;
        tMsg    *msg;
        
-       ENTER("pErr iDest iLength pData", Err, Dest, Length, Data);
+       ENTER("iDest iLength pData", Dest, Length, Data);
        
        if(Length <= 0 || !Data) {
                errno = -EINVAL;
@@ -37,9 +37,8 @@ int Proc_SendMessage(Uint Dest, int Length, void *Data)
 
        // Get thread
        thread = Threads_GetThread( Dest );
-       
-       // Error check
        if(!thread)     LEAVE_RET('i', -1);
+       LOG("Destination %p(%i %s)", thread, thread->TID, thread->ThreadName);
        
        // Get Spinlock
        SHORTLOCK( &thread->IsLocked );
@@ -79,10 +78,11 @@ int Proc_SendMessage(Uint Dest, int Length, void *Data)
  * \fn int Proc_GetMessage(Uint *Source, void *Buffer)
  * \brief Gets a message
  * \param Source       Where to put the source TID
+ * \param BufSize      Size of \a Buffer, only this many bytes will be copied
  * \param Buffer       Buffer to place the message data (set to NULL to just get message length)
  * \return Message length
  */
-int Proc_GetMessage(Uint *Source, void *Buffer)
+int Proc_GetMessage(Uint *Source, Uint BufSize, void *Buffer)
 {
         int    ret;
        void    *tmp;
@@ -114,7 +114,7 @@ int Proc_GetMessage(Uint *Source, void *Buffer)
        // Get message
        if(Buffer != GETMSG_IGNORE)
        {
-               if( !CheckMem( Buffer, cur->Messages->Length ) )
+               if( !CheckMem( Buffer, BufSize ) )
                {
                        LOG("Invalid buffer");
                        errno = -EINVAL;
@@ -122,8 +122,15 @@ int Proc_GetMessage(Uint *Source, void *Buffer)
                        LEAVE('i', -1);
                        return -1;
                }
+               if( BufSize < cur->Messages->Length )
+                       Log_Notice("Threads", "Buffer of 0x%x passed, but 0x%x long message, truncated",
+                               BufSize, cur->Messages->Length);
+               else if( BufSize < cur->Messages->Length )
+                       BufSize = cur->Messages->Length;
+               else
+                       ;       // equal
                LOG("Copied to buffer");
-               memcpy(Buffer, cur->Messages->Data, cur->Messages->Length);
+               memcpy(Buffer, cur->Messages->Data, BufSize);
        }
        ret = cur->Messages->Length;
        

UCC git Repository :: git.ucc.asn.au