altos: Round selected log size down to ao_storage_block multiple
authorKeith Packard <keithp@keithp.com>
Tue, 9 Jun 2020 04:03:31 +0000 (21:03 -0700)
committerKeith Packard <keithp@keithp.com>
Tue, 9 Jun 2020 04:17:55 +0000 (21:17 -0700)
There was some (broken) code that complained if the value set wasn't
correct, that has been replaced by code that accepts any value and
just rounds it down to a multiple of ao_storage_block. The code also
stops complaining when set to the current value when storage isn't
empty.

Signed-off-by: Keith Packard <keithp@keithp.com>
src/kernel/ao_config.c

index e4fc73c99059aadac5c7e9360f702a43770fb7d6..9fbc64bdbd482e7da78d2dd60d3f71d92ae1141c 100644 (file)
@@ -625,24 +625,24 @@ ao_config_log_set(void)
 #if FLIGHT_LOG_APPEND
        printf("Flight log fixed size %d kB\n", ao_storage_log_max >> 10);
 #else
-       uint16_t        block = (uint16_t) (ao_storage_block >> 10);
-       uint16_t        log_max = (uint16_t) (ao_storage_log_max >> 10);
        uint32_t        r;
 
        r = ao_cmd_decimal();
        if (ao_cmd_status != ao_cmd_success)
                return;
-       if (ao_log_present())
-               printf("Storage must be empty before changing log size\n");
-       else if (block > 1024 && (r & (block - 1)))
-               printf("Flight log size must be multiple of %d kB\n", block);
-       else if (r > log_max)
-               printf("Flight log max %d kB\n", log_max);
-       else {
-               _ao_config_edit_start();
-               ao_config.flight_log_max = r << 10;
-               _ao_config_edit_finish();
+       r = r << 10;
+       if (ao_log_present()) {
+               if (r != ao_config.flight_log_max)
+                       printf("Storage must be empty before changing log size\n");
+               return;
+       }
+       if (r > ao_storage_log_max) {
+               printf("Flight log max %d kB\n", ao_storage_log_max >> 10);
+               return;
        }
+       _ao_config_edit_start();
+       ao_config.flight_log_max = r & ~(ao_storage_block - 1);
+       _ao_config_edit_finish();
 #endif
 }
 #endif /* HAS_LOG */