mirror of
https://github.com/CTCaer/hekate.git
synced 2024-11-26 19:52:11 +00:00
Update ini parsing to the new version
This commit is contained in:
parent
df8e6ea57d
commit
a442737a59
3 changed files with 81 additions and 15 deletions
62
ipl/ini.c
62
ipl/ini.c
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
|
* Copyright (C) 2018 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -45,10 +46,6 @@ int ini_parse(link_t *dst, char *ini_path)
|
||||||
f_gets(lbuf, 512, &fp);
|
f_gets(lbuf, 512, &fp);
|
||||||
lblen = strlen(lbuf);
|
lblen = strlen(lbuf);
|
||||||
|
|
||||||
//Skip empty lines and comments.
|
|
||||||
if (lblen <= 1 || lbuf[0] == '#')
|
|
||||||
continue;
|
|
||||||
|
|
||||||
//Remove trailing newline.
|
//Remove trailing newline.
|
||||||
if (lbuf[lblen - 1] == '\n')
|
if (lbuf[lblen - 1] == '\n')
|
||||||
lbuf[lblen - 1] = 0;
|
lbuf[lblen - 1] = 0;
|
||||||
|
@ -68,9 +65,58 @@ int ini_parse(link_t *dst, char *ini_path)
|
||||||
|
|
||||||
csec = (ini_sec_t *)malloc(sizeof(ini_sec_t));
|
csec = (ini_sec_t *)malloc(sizeof(ini_sec_t));
|
||||||
csec->name = _strdup(&lbuf[1]);
|
csec->name = _strdup(&lbuf[1]);
|
||||||
|
csec->type = INI_CHOICE;
|
||||||
list_init(&csec->kvs);
|
list_init(&csec->kvs);
|
||||||
}
|
}
|
||||||
else if (csec) //Extract key/value.
|
else if (lblen > 2 && lbuf[0] == '{') //Create new caption.
|
||||||
|
{
|
||||||
|
if (csec)
|
||||||
|
{
|
||||||
|
list_append(dst, &csec->link);
|
||||||
|
csec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '}'; i++)
|
||||||
|
;
|
||||||
|
lbuf[i] = 0;
|
||||||
|
|
||||||
|
csec = (ini_sec_t *)malloc(sizeof(ini_sec_t));
|
||||||
|
csec->name = _strdup(&lbuf[1]);
|
||||||
|
csec->type = INI_CAPTION;
|
||||||
|
csec->color = 0xFF0AB9E6;
|
||||||
|
}
|
||||||
|
else if (lblen > 2 && lbuf[0] == '#') //Create empty lines and comments.
|
||||||
|
{
|
||||||
|
if (csec)
|
||||||
|
{
|
||||||
|
list_append(dst, &csec->link);
|
||||||
|
csec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
u32 i;
|
||||||
|
for (i = 0; i < lblen && lbuf[i] != '\n'; i++)
|
||||||
|
;
|
||||||
|
lbuf[i] = 0;
|
||||||
|
|
||||||
|
csec = (ini_sec_t *)malloc(sizeof(ini_sec_t));
|
||||||
|
csec->name = _strdup(&lbuf[1]);
|
||||||
|
csec->type = INI_COMMENT;
|
||||||
|
|
||||||
|
}
|
||||||
|
else if (lblen <= 1)
|
||||||
|
{
|
||||||
|
if (csec)
|
||||||
|
{
|
||||||
|
list_append(dst, &csec->link);
|
||||||
|
csec = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
csec = (ini_sec_t *)malloc(sizeof(ini_sec_t));
|
||||||
|
csec->name = NULL;
|
||||||
|
csec->type = INI_NEWLINE;
|
||||||
|
}
|
||||||
|
else if (csec->type == INI_CHOICE) //Extract key/value.
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '='; i++)
|
for (i = 0; i < lblen && lbuf[i] != '\n' && lbuf[i] != '='; i++)
|
||||||
|
@ -94,7 +140,12 @@ int ini_parse(link_t *dst, char *ini_path)
|
||||||
|
|
||||||
void ini_free(link_t *dst)
|
void ini_free(link_t *dst)
|
||||||
{
|
{
|
||||||
|
if (dst == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, dst, link)
|
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, dst, link)
|
||||||
|
{
|
||||||
|
if (ini_sec->type == INI_CHOICE)
|
||||||
{
|
{
|
||||||
LIST_FOREACH_ENTRY(ini_kv_t, kv, &ini_sec->kvs, link)
|
LIST_FOREACH_ENTRY(ini_kv_t, kv, &ini_sec->kvs, link)
|
||||||
{
|
{
|
||||||
|
@ -102,6 +153,7 @@ void ini_free(link_t *dst)
|
||||||
free(kv->val);
|
free(kv->val);
|
||||||
free(kv);
|
free(kv);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
free(ini_sec->name);
|
free(ini_sec->name);
|
||||||
free(ini_sec);
|
free(ini_sec);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2018 naehrwert
|
* Copyright (c) 2018 naehrwert
|
||||||
|
* Copyright (C) 2018 CTCaer
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
* under the terms and conditions of the GNU General Public License,
|
* under the terms and conditions of the GNU General Public License,
|
||||||
|
@ -20,6 +21,12 @@
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
|
||||||
|
#define INI_CHOICE 3
|
||||||
|
#define INI_CAPTION 5
|
||||||
|
#define INI_CHGLINE 6
|
||||||
|
#define INI_NEWLINE 0xFE
|
||||||
|
#define INI_COMMENT 0xFF
|
||||||
|
|
||||||
typedef struct _ini_kv_t
|
typedef struct _ini_kv_t
|
||||||
{
|
{
|
||||||
char *key;
|
char *key;
|
||||||
|
@ -32,6 +39,8 @@ typedef struct _ini_sec_t
|
||||||
char *name;
|
char *name;
|
||||||
link_t kvs;
|
link_t kvs;
|
||||||
link_t link;
|
link_t link;
|
||||||
|
u32 type;
|
||||||
|
u32 color;
|
||||||
} ini_sec_t;
|
} ini_sec_t;
|
||||||
|
|
||||||
int ini_parse(link_t *dst, char *ini_path);
|
int ini_parse(link_t *dst, char *ini_path);
|
||||||
|
|
17
ipl/main.c
17
ipl/main.c
|
@ -1333,7 +1333,7 @@ out:;
|
||||||
|
|
||||||
void launch_firmware()
|
void launch_firmware()
|
||||||
{
|
{
|
||||||
u8 max_entries = 16;
|
u8 max_entries = 61;
|
||||||
|
|
||||||
ini_sec_t *cfg_sec = NULL;
|
ini_sec_t *cfg_sec = NULL;
|
||||||
LIST_INIT(ini_sections);
|
LIST_INIT(ini_sections);
|
||||||
|
@ -1346,23 +1346,28 @@ void launch_firmware()
|
||||||
if (ini_parse(&ini_sections, "hekate_ipl.ini"))
|
if (ini_parse(&ini_sections, "hekate_ipl.ini"))
|
||||||
{
|
{
|
||||||
// Build configuration menu.
|
// Build configuration menu.
|
||||||
ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * max_entries);
|
ment_t *ments = (ment_t *)malloc(sizeof(ment_t) * (max_entries + 3));
|
||||||
ments[0].type = MENT_BACK;
|
ments[0].type = MENT_BACK;
|
||||||
ments[0].caption = "Back";
|
ments[0].caption = "Back";
|
||||||
u32 i = 1;
|
ments[1].type = MENT_CHGLINE;
|
||||||
|
|
||||||
|
u32 i = 2;
|
||||||
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link)
|
LIST_FOREACH_ENTRY(ini_sec_t, ini_sec, &ini_sections, link)
|
||||||
{
|
{
|
||||||
if (!strcmp(ini_sec->name, "config"))
|
if (!strcmp(ini_sec->name, "config") ||
|
||||||
|
ini_sec->type == INI_COMMENT || ini_sec->type == INI_NEWLINE)
|
||||||
continue;
|
continue;
|
||||||
ments[i].type = MENT_CHOICE;
|
ments[i].type = ini_sec->type;
|
||||||
ments[i].caption = ini_sec->name;
|
ments[i].caption = ini_sec->name;
|
||||||
ments[i].data = ini_sec;
|
ments[i].data = ini_sec;
|
||||||
|
if (ini_sec->type == MENT_CAPTION)
|
||||||
|
ments[i].color = ini_sec->color;
|
||||||
i++;
|
i++;
|
||||||
|
|
||||||
if (i > max_entries)
|
if (i > max_entries)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (i > 1)
|
if (i > 2)
|
||||||
{
|
{
|
||||||
memset(&ments[i], 0, sizeof(ment_t));
|
memset(&ments[i], 0, sizeof(ment_t));
|
||||||
menu_t menu = {
|
menu_t menu = {
|
||||||
|
|
Loading…
Reference in a new issue