]> gitweb.hhaalo.de Git - sane-kds-s2000w-net.git/commitdiff
change option descriptor no mem return
authorBastian Dehn <hhaalo@arcor.de>
Sat, 11 Oct 2025 09:13:46 +0000 (11:13 +0200)
committerBastian Dehn <hhaalo@arcor.de>
Sat, 11 Oct 2025 09:13:46 +0000 (11:13 +0200)
src/kds_s2000w_net.c
src/kds_s2000w_option_descriptors.c
src/kds_s2000w_option_descriptors.h
tests/kds_s2000w_option_descriptor_tests.c

index 6a184d9eae1b51335fce4a8cd6c5eba3fddad0e1..9d8b7debee7b7256f7a13504a8ce04289c61865c 100644 (file)
@@ -90,8 +90,7 @@ SANE_Status sane_kds_s2000w_net_open(SANE_String_Const devicename,
                return SANE_STATUS_DEVICE_BUSY;
        }
 
-       kds_s2000w_option_descriptors_init(h->profile);
-       return SANE_STATUS_GOOD;
+       return kds_s2000w_option_descriptors_init(h->profile);
 }
 
 void sane_kds_s2000w_net_close(SANE_Handle handle)
index 545ef07205d17d48a8c25972f71814af76e3bf96..4e921ae03c6a3876aaa2c14f38a8b96f12b3b6d5 100644 (file)
@@ -1492,13 +1492,21 @@ SANE_Option_Descriptor* _kds_s2000w_option_descriptor_document_feeder_timeout_re
 /*******************************************************************************
  * profiles
  ******************************************************************************/
-void _kds_s2000w_option_descriptors_init_min_profile()
+SANE_Status _kds_s2000w_option_descriptors_init_min_profile()
 {
        max_option_count = PROFILE_MIN_MAX_OPTION_COUNT;
 
        descriptors = malloc(sizeof(option_descriptor*) * max_option_count);
+       if (descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
+
        for (int i = 0; i < max_option_count; i++) {
                descriptors[i] = malloc(sizeof(option_descriptor));
+               if (descriptors[i] == NULL) {
+                       kds_s2000w_option_descriptors_free(descriptors);
+                       descriptors = NULL;
+                       return SANE_STATUS_NO_MEM;
+               }
        }
 
        descriptors[0]->config_name = OPTION_COUNT;
@@ -1525,15 +1533,25 @@ void _kds_s2000w_option_descriptors_init_min_profile()
        descriptors[10]->descriptor = _kds_s2000w_option_descriptor_feeder_group();
        descriptors[11]->config_name = AUTOSTART;
        descriptors[11]->descriptor = _kds_s2000w_option_descriptor_autostart();
+
+       return SANE_STATUS_GOOD;
 }
 
-void _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile()
+SANE_Status _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile()
 {
        max_option_count = PROFILE_230802_V1_0_36_MAX_OPTION_COUNT;
 
        descriptors = malloc(sizeof(option_descriptor*) * max_option_count);
+       if (descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
+
        for (int i = 0; i < max_option_count; i++) {
                descriptors[i] = malloc(sizeof(option_descriptor));
+               if (descriptors[i] == NULL) {
+                       kds_s2000w_option_descriptors_free(descriptors);
+                       descriptors = NULL;
+                       return SANE_STATUS_NO_MEM;
+               }
        }
 
        descriptors[0]->config_name = OPTION_COUNT;
@@ -1588,15 +1606,25 @@ void _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile()
        descriptors[24]->descriptor = _kds_s2000w_option_descriptor_feeder_group();
        descriptors[25]->config_name = AUTOSTART;
        descriptors[25]->descriptor = _kds_s2000w_option_descriptor_autostart();
+
+       return SANE_STATUS_GOOD;
 }
 
-void _kds_s2000w_option_descriptors_init_full_profile()
+SANE_Status _kds_s2000w_option_descriptors_init_full_profile()
 {
        max_option_count = PROFILE_FULL_MAX_OPTION_COUNT;
 
        descriptors = malloc(sizeof(option_descriptor*) * max_option_count);
+       if (descriptors == NULL)
+               return SANE_STATUS_NO_MEM;
+
        for (int i = 0; i < max_option_count; i++) {
                descriptors[i] = malloc(sizeof(option_descriptor));
+               if (descriptors[i] == NULL) {
+                       kds_s2000w_option_descriptors_free(descriptors);
+                       descriptors = NULL;
+                       return SANE_STATUS_NO_MEM;
+               }
        }
 
        descriptors[0]->config_name = OPTION_COUNT;
@@ -1695,26 +1723,30 @@ void _kds_s2000w_option_descriptors_init_full_profile()
        descriptors[46]->descriptor = _kds_s2000w_option_descriptor_document_feeder_timeout();
        descriptors[47]->config_name = DOCUMENT_FEEDER_TIMEOUT_RESPONSE;
        descriptors[47]->descriptor = _kds_s2000w_option_descriptor_document_feeder_timeout_response();
+
+       return SANE_STATUS_GOOD;
 }
 
 /*******************************************************************************
  * public methods
  ******************************************************************************/
-void kds_s2000w_option_descriptors_init(uint8_t profile)
+SANE_Status kds_s2000w_option_descriptors_init(uint8_t profile)
 {
        kds_s2000w_debug_printf(ALL, "kds_s2000w_option_descriptors_init");
 
        switch (profile) {
        case PROFILE_FULL:
-               _kds_s2000w_option_descriptors_init_full_profile();
+               return _kds_s2000w_option_descriptors_init_full_profile();
                break;
        case PROFILE_230802_V1_0_36:
-               _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile();
+               return _kds_s2000w_option_descriptors_init_230802_v1_0_36_profile();
                break;
        default:
-               _kds_s2000w_option_descriptors_init_min_profile();
+               return _kds_s2000w_option_descriptors_init_min_profile();
                break;
        }
+
+       return SANE_STATUS_INVAL;
 }
 
 void kds_s2000w_option_descriptors_free()
index 37410ff6a5dee7eebfdfcf2961552636c1d1f7c2..3f2be1e6c9bd87234249bc19b0db7a7511d7c8f8 100644 (file)
@@ -69,7 +69,7 @@ typedef struct {
        SANE_Option_Descriptor* descriptor;
 } option_descriptor;
 
-void kds_s2000w_option_descriptors_init(uint8_t profile);
+SANE_Status kds_s2000w_option_descriptors_init(uint8_t profile);
 void kds_s2000w_option_descriptors_free();
 
 uint8_t kds_s2000w_option_descriptors_get_max_option_count();
index 56822338cafaab4e1b689de0461f323d550893ba..eadb36404104d6ed17f579b42cdf2ebc1261da2e 100644 (file)
@@ -10,9 +10,7 @@
 
 int setup(void** state)
 {
-       kds_s2000w_option_descriptors_init(PROFILE_FULL);
-
-       return 0;
+       return kds_s2000w_option_descriptors_init(PROFILE_FULL);
 }
 
 int teardown(void **state)