Cleared up error code usage.
authorArmin Novak <armin.novak@thincast.com>
Thu, 28 Jan 2016 11:05:14 +0000 (12:05 +0100)
committerArmin Novak <armin.novak@thincast.com>
Thu, 28 Jan 2016 11:05:14 +0000 (12:05 +0100)
channels/rdpdr/client/irp.c
channels/rdpdr/client/irp.h
channels/rdpdr/client/rdpdr_main.c

index 2d1f965..899b89a 100644 (file)
@@ -77,18 +77,28 @@ static UINT irp_complete(IRP* irp)
        return error;
 }
 
-IRP* irp_new(DEVMAN* devman, wStream* s)
+IRP* irp_new(DEVMAN* devman, wStream* s, UINT* error)
 {
        IRP* irp;
        DEVICE* device;
        UINT32 DeviceId;
 
+       if (!Stream_EnsureRemainingCapacity(s, 20))
+       {
+               if (error)
+                       *error = CHANNEL_RC_NO_BUFFER;
+               return NULL;
+       }
+
        Stream_Read_UINT32(s, DeviceId); /* DeviceId (4 bytes) */
        device = devman_get_device_by_id(devman, DeviceId);
 
        if (!device)
        {
-               WLog_ERR(TAG, "devman_get_device_by_id failed!");
+               WLog_WARN(TAG, "devman_get_device_by_id failed!");
+               if (error)
+                       *error = CHANNEL_RC_OK;
+
                return NULL;
        };
 
@@ -97,6 +107,8 @@ IRP* irp_new(DEVMAN* devman, wStream* s)
        if (!irp)
        {
                WLog_ERR(TAG, "_aligned_malloc failed!");
+               if (error)
+                       *error = CHANNEL_RC_NO_MEMORY;
                return NULL;
        }
 
@@ -117,6 +129,8 @@ IRP* irp_new(DEVMAN* devman, wStream* s)
        {
                WLog_ERR(TAG, "Stream_New failed!");
                _aligned_free(irp);
+               if (error)
+                       *error = CHANNEL_RC_NO_MEMORY;
                return NULL;
        }
        Stream_Write_UINT16(irp->output, RDPDR_CTYP_CORE); /* Component (2 bytes) */
@@ -131,5 +145,8 @@ IRP* irp_new(DEVMAN* devman, wStream* s)
        irp->thread = NULL;
        irp->cancelled = FALSE;
 
+       if (error)
+               *error = CHANNEL_RC_OK;
+
        return irp;
 }
index d943663..17d75ac 100644 (file)
@@ -23,6 +23,6 @@
 
 #include "rdpdr_main.h"
 
-IRP* irp_new(DEVMAN* devman, wStream* s);
+IRP* irp_new(DEVMAN* devman, wStream* s, UINT* error);
 
 #endif /* FREERDP_CHANNEL_RDPDR_CLIENT_IRP_H */
index da26ca1..3378f92 100644 (file)
@@ -497,7 +497,6 @@ static UINT handle_hotplug(rdpdrPlugin* rdpdr)
                                free(drive->Path);
                                free(drive->Name);
                                free(drive);
-                               error = CHANNEL_RC_NO_MEMORY;
                                goto cleanup;
                        }
                }
@@ -820,7 +819,7 @@ static UINT rdpdr_send_device_list_announce_request(rdpdrPlugin* rdpdr, BOOL use
                        if (!Stream_EnsureRemainingCapacity(s, 20 + data_len))
                        {
                                WLog_ERR(TAG, "Stream_EnsureRemainingCapacity failed!");
-                               return CHANNEL_RC_NO_MEMORY;
+                               return CHANNEL_RC_NO_BUFFER;
                        }
 
                        Stream_Write_UINT32(s, device->type); /* deviceType */
@@ -869,12 +868,12 @@ static UINT rdpdr_process_irp(rdpdrPlugin* rdpdr, wStream* s)
        IRP* irp;
        UINT error = CHANNEL_RC_OK;
 
-       irp = irp_new(rdpdr->devman, s);
+       irp = irp_new(rdpdr->devman, s, &error);
 
        if (!irp)
        {
-               WLog_ERR(TAG, "irp_new failed!");
-               return CHANNEL_RC_NO_MEMORY;
+               WLog_ERR(TAG, "irp_new failed with %lu!", error);
+               return error;
        }
 
        IFCALLRET(irp->device->IRPRequest, error, irp->device, irp);
@@ -1217,7 +1216,7 @@ static UINT rdpdr_virtual_channel_event_data_received(rdpdrPlugin* rdpdr,
        if (!Stream_EnsureRemainingCapacity(data_in, (int) dataLength))
        {
                WLog_ERR(TAG,  "Stream_EnsureRemainingCapacity failed!");
-               return CHANNEL_RC_NO_MEMORY;
+               return CHANNEL_RC_NO_BUFFER;
        }
        Stream_Write(data_in, pData, dataLength);