diff options
| author | Keith Packard <keithp@keithp.com> | 2011-01-12 12:41:26 -0800 | 
|---|---|---|
| committer | Keith Packard <keithp@keithp.com> | 2011-01-12 12:41:26 -0800 | 
| commit | d794ef9e0fbe4d13259db1bbd69f01717c14400b (patch) | |
| tree | 098bfd628bfdf10ea45477ecab1f9915ba8c04a4 | |
| parent | 8801b8c1947bd39f7c985b91a2ba8dbc81bcc91a (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>
| -rw-r--r-- | src/ao_log.c | 46 | 
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); | 
