summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2011-01-12 12:41:26 -0800
committerKeith Packard <keithp@keithp.com>2011-01-12 12:41:26 -0800
commitd794ef9e0fbe4d13259db1bbd69f01717c14400b (patch)
tree098bfd628bfdf10ea45477ecab1f9915ba8c04a4 /src
parent8801b8c1947bd39f7c985b91a2ba8dbc81bcc91a (diff)
altos: check for valid flight number in ao_log_delete
Zero is not a valid flight number, and ao_log_flight uses that to indicate 'no flight in this slot'. Check the user-provided input for zero before looking through the slots. Signed-off-by: Keith Packard <keithp@keithp.com>
Diffstat (limited to 'src')
-rw-r--r--src/ao_log.c46
1 files changed, 24 insertions, 22 deletions
diff --git a/src/ao_log.c b/src/ao_log.c
index ba019992..8666482b 100644
--- a/src/ao_log.c
+++ b/src/ao_log.c
@@ -355,31 +355,33 @@ ao_log_delete(void) __reentrant
slots = ao_log_slots();
/* Look for the flight log matching the requested flight */
- for (slot = 0; slot < slots; slot++) {
- if (ao_log_flight(slot) == ao_cmd_lex_i) {
- ao_log_erase_mark();
- ao_log_current_pos = ao_log_pos(slot);
- ao_log_end_pos = ao_log_current_pos + ao_config.flight_log_max;
- while (ao_log_current_pos < ao_log_end_pos) {
- /*
- * Check to see if we've reached the end of
- * the used memory to avoid re-erasing the same
- * memory over and over again
- */
- if (ao_storage_read(ao_log_current_pos,
- &log,
- sizeof (struct ao_log_record))) {
- for (slot = 0; slot < sizeof (struct ao_log_record); slot++)
- if (((uint8_t *) &log)[slot] != 0xff)
+ if (ao_cmd_lex_i) {
+ for (slot = 0; slot < slots; slot++) {
+ if (ao_log_flight(slot) == ao_cmd_lex_i) {
+ ao_log_erase_mark();
+ ao_log_current_pos = ao_log_pos(slot);
+ ao_log_end_pos = ao_log_current_pos + ao_config.flight_log_max;
+ while (ao_log_current_pos < ao_log_end_pos) {
+ /*
+ * Check to see if we've reached the end of
+ * the used memory to avoid re-erasing the same
+ * memory over and over again
+ */
+ if (ao_storage_read(ao_log_current_pos,
+ &log,
+ sizeof (struct ao_log_record))) {
+ for (slot = 0; slot < sizeof (struct ao_log_record); slot++)
+ if (((uint8_t *) &log)[slot] != 0xff)
+ break;
+ if (slot == sizeof (struct ao_log_record))
break;
- if (slot == sizeof (struct ao_log_record))
- break;
+ }
+ ao_storage_erase(ao_log_current_pos);
+ ao_log_current_pos += ao_storage_block;
}
- ao_storage_erase(ao_log_current_pos);
- ao_log_current_pos += ao_storage_block;
+ puts("Erased");
+ return;
}
- puts("Erased");
- return;
}
}
printf("No such flight: %d\n", ao_cmd_lex_i);