1
0
mirror of https://github.com/mist-devel/mist-firmware.git synced 2026-05-06 00:04:39 +00:00

ini_parser: fix handling of >1024 bytes files and too long line handling

- pt&0x3ff=0x200 is true only at the first 512th byte, then only after the next 1024 bytes
- don't stop reading the line even it's too long, otherwise the
  it'll wrap to the next line
This commit is contained in:
Gyorgy Szombathelyi
2020-02-06 11:39:08 +01:00
parent bb6c35657b
commit cec6588121

View File

@@ -14,9 +14,9 @@
#ifndef INI_PARSER_TEST
#include "debug.h"
#include "fat.h"
#endif
#include "user_io.h"
#include "data_io.h"
#endif
//// defines ////
#define INI_EOT 4 // End-Of-Transmission
@@ -76,13 +76,13 @@ void ini_rom_upload(char *s) {
//// ini_getch() ////
char ini_getch()
{
if ((ini_pt&0x3ff) == 0x200) {
if (!(ini_pt&0x1ff)) {
// reload buffer
#ifdef INI_PARSER_TEST
fread(sector_buffer, sizeof(char), INI_BUF_SIZE, ini_fp);
#else
FileNextSector(&ini_file);
FileRead(&ini_file, sector_buffer);
FileNextSector(&ini_file);
#endif
}
@@ -102,7 +102,7 @@ int ini_putch(char c)
sector_buffer[ini_pt++] = c;
if ((ini_pt%0x3ff) == 0x200) {
if (!(ini_pt%0x1ff)) {
// write buffer
ini_pt = 0;
#ifdef INI_PARSER_TEST
@@ -134,13 +134,12 @@ int ini_getline(char* line)
char literal=0;
int i=0;
while(i<(INI_LINE_SIZE-1)) {
while(1) {
c = ini_getch();
if ((!c) || CHAR_IS_LINEEND(c)) break;
else if (CHAR_IS_QUOTE(c)) literal ^= 1;
else if (CHAR_IS_COMMENT(c) && !ignore && !literal) ignore++;
else if (literal) line[i++] = c;
else if (CHAR_IS_VALID(c) && !ignore) line[i++] = c;
else if ((literal || (CHAR_IS_VALID(c) && !ignore)) && i<(INI_LINE_SIZE-1)) line[i++] = c;
}
line[i] = '\0';
return c==0 ? INI_EOT : literal ? 1 : 0;
@@ -161,6 +160,7 @@ int ini_putline(char* line)
char *get_core_name()
{
#ifndef INI_PARSER_TEST
switch(user_io_core_type())
{
case CORE_TYPE_MINIMIG:
@@ -182,6 +182,9 @@ char *get_core_name()
}
return "";
#else
return "TESTCORE";
#endif
}
//// ini_get_section() ////
@@ -317,7 +320,9 @@ void ini_parse(const ini_cfg_t* cfg)
ini_parser_debugf("Start INI parser for core \"%s\".", get_core_name());
#ifndef INI_PARSER_TEST
data_io_rom_upload(NULL, 0); // prepare upload
#endif
// open ini file
#ifdef INI_PARSER_TEST
@@ -345,13 +350,6 @@ void ini_parse(const ini_cfg_t* cfg)
ini_pt = 0;
// preload buffer
#ifdef INI_PARSER_TEST
fread(sector_buffer, sizeof(char), INI_BUF_SIZE, ini_fp);
#else
FileRead(&ini_file, sector_buffer);
#endif
// parse ini
while (1) {
// get line
@@ -376,7 +374,9 @@ void ini_parse(const ini_cfg_t* cfg)
fclose(ini_fp);
#endif
#ifndef INI_PARSER_TEST
data_io_rom_upload(NULL, 2); // upload done
#endif
}