mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2024-12-14 12:10:34 +00:00
Replace stdio.h by fstream
This commit is contained in:
parent
59164c33bd
commit
5f181ef915
@ -45,32 +45,34 @@
|
|||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <cctype>
|
|
||||||
#include <cstdlib>
|
|
||||||
#include "ini.h"
|
|
||||||
#include "INIReader.h"
|
#include "INIReader.h"
|
||||||
|
#include <cctype> // for tolower
|
||||||
|
#include <cstdlib> // for strol
|
||||||
|
#include "ini.h"
|
||||||
|
|
||||||
using std::string;
|
|
||||||
|
|
||||||
INIReader::INIReader(string filename)
|
INIReader::INIReader(std::string filename)
|
||||||
{
|
{
|
||||||
_error = ini_parse(filename.c_str(), ValueHandler, this);
|
_error = ini_parse(filename.c_str(), ValueHandler, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int INIReader::ParseError()
|
int INIReader::ParseError()
|
||||||
{
|
{
|
||||||
return _error;
|
return _error;
|
||||||
}
|
}
|
||||||
|
|
||||||
string INIReader::Get(string section, string name, string default_value)
|
|
||||||
|
std::string INIReader::Get(std::string section, std::string name, std::string default_value)
|
||||||
{
|
{
|
||||||
string key = MakeKey(section, name);
|
std::string key = MakeKey(section, name);
|
||||||
return _values.count(key) ? _values[key] : default_value;
|
return _values.count(key) ? _values[key] : default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
long INIReader::GetInteger(string section, string name, long default_value)
|
|
||||||
|
long INIReader::GetInteger(std::string section, std::string name, long default_value)
|
||||||
{
|
{
|
||||||
string valstr = Get(section, name, "");
|
std::string valstr = Get(section, name, "");
|
||||||
const char* value = valstr.c_str();
|
const char* value = valstr.c_str();
|
||||||
char* end;
|
char* end;
|
||||||
// This parses "1234" (decimal) and also "0x4D2" (hex)
|
// This parses "1234" (decimal) and also "0x4D2" (hex)
|
||||||
@ -78,15 +80,17 @@ long INIReader::GetInteger(string section, string name, long default_value)
|
|||||||
return end > value ? n : default_value;
|
return end > value ? n : default_value;
|
||||||
}
|
}
|
||||||
|
|
||||||
string INIReader::MakeKey(string section, string name)
|
|
||||||
|
std::string INIReader::MakeKey(std::string section, std::string name)
|
||||||
{
|
{
|
||||||
string key = section + "." + name;
|
std::string key = section + "." + name;
|
||||||
// Convert to lower case to make lookups case-insensitive
|
// Convert to lower case to make lookups case-insensitive
|
||||||
for (unsigned int i = 0; i < key.length(); i++)
|
for (unsigned int i = 0; i < key.length(); i++)
|
||||||
key[i] = tolower(key[i]);
|
key[i] = tolower(key[i]);
|
||||||
return key;
|
return key;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int INIReader::ValueHandler(void* user, const char* section, const char* name,
|
int INIReader::ValueHandler(void* user, const char* section, const char* name,
|
||||||
const char* value)
|
const char* value)
|
||||||
{
|
{
|
||||||
|
@ -53,11 +53,11 @@
|
|||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#include "ini.h"
|
#include "ini.h"
|
||||||
|
#include <cctype>
|
||||||
|
#include <fstream>
|
||||||
|
#include <string>
|
||||||
|
|
||||||
|
|
||||||
#define MAX_LINE 200
|
#define MAX_LINE 200
|
||||||
#define MAX_SECTION 50
|
#define MAX_SECTION 50
|
||||||
@ -107,70 +107,88 @@ int ini_parse(const char* filename,
|
|||||||
char section[MAX_SECTION] = "";
|
char section[MAX_SECTION] = "";
|
||||||
char prev_name[MAX_NAME] = "";
|
char prev_name[MAX_NAME] = "";
|
||||||
|
|
||||||
FILE* file;
|
std::ifstream file;
|
||||||
char* start;
|
char* start;
|
||||||
char* end;
|
char* end;
|
||||||
char* name;
|
char* name;
|
||||||
char* value;
|
char* value;
|
||||||
int lineno = 0;
|
int lineno = 0;
|
||||||
int error = 0;
|
int error = 0;
|
||||||
|
std::string line_str;
|
||||||
|
|
||||||
file = fopen(filename, "r");
|
file.open(filename, std::fstream::in);
|
||||||
if (!file)
|
if (!file.is_open())
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
/* Scan through file line by line */
|
/* Scan through file line by line */
|
||||||
while (fgets(line, sizeof(line), file) != NULL) {
|
while (std::getline(file, line_str))
|
||||||
lineno++;
|
{
|
||||||
start = lskip(rstrip(line));
|
lineno++;
|
||||||
|
int len_str = line_str.length();
|
||||||
|
const char * read_line = line_str.data();
|
||||||
|
if (len_str > (MAX_LINE - 1)) len_str = MAX_LINE - 1;
|
||||||
|
int i;
|
||||||
|
for(i = 0; i < len_str; i++)
|
||||||
|
{
|
||||||
|
line[i] = read_line[i];
|
||||||
|
}
|
||||||
|
line[len_str] = '\0';
|
||||||
|
start = lskip(rstrip(line));
|
||||||
|
|
||||||
#if INI_ALLOW_MULTILINE
|
#if INI_ALLOW_MULTILINE
|
||||||
if (*prev_name && *start && start > line) {
|
if (*prev_name && *start && start > line)
|
||||||
/* Non-black line with leading whitespace, treat as continuation
|
{
|
||||||
of previous name's value (as per Python ConfigParser). */
|
/* Non-black line with leading whitespace, treat as continuation
|
||||||
if (!handler(user, section, prev_name, start) && !error)
|
of previous name's value (as per Python ConfigParser). */
|
||||||
error = lineno;
|
if (!handler(user, section, prev_name, start) && !error)
|
||||||
}
|
|
||||||
else
|
|
||||||
#endif
|
|
||||||
if (*start == '[') {
|
|
||||||
/* A "[section]" line */
|
|
||||||
end = find_char_or_comment(start + 1, ']');
|
|
||||||
if (*end == ']') {
|
|
||||||
*end = '\0';
|
|
||||||
strncpy0(section, start + 1, sizeof(section));
|
|
||||||
*prev_name = '\0';
|
|
||||||
}
|
|
||||||
else if (!error) {
|
|
||||||
/* No ']' found on section line */
|
|
||||||
error = lineno;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (*start && *start != ';') {
|
|
||||||
/* Not a comment, must be a name=value pair */
|
|
||||||
end = find_char_or_comment(start, '=');
|
|
||||||
if (*end == '=') {
|
|
||||||
*end = '\0';
|
|
||||||
name = rstrip(start);
|
|
||||||
value = lskip(end + 1);
|
|
||||||
end = find_char_or_comment(value, ';');
|
|
||||||
if (*end == ';')
|
|
||||||
*end = '\0';
|
|
||||||
rstrip(value);
|
|
||||||
|
|
||||||
/* Valid name=value pair found, call handler */
|
|
||||||
strncpy0(prev_name, name, sizeof(prev_name));
|
|
||||||
if (!handler(user, section, name, value) && !error)
|
|
||||||
error = lineno;
|
error = lineno;
|
||||||
}
|
}
|
||||||
else if (!error) {
|
else
|
||||||
/* No '=' found on name=value line */
|
#endif
|
||||||
error = lineno;
|
if (*start == '[')
|
||||||
}
|
{
|
||||||
}
|
/* A "[section]" line */
|
||||||
}
|
end = find_char_or_comment(start + 1, ']');
|
||||||
|
if (*end == ']')
|
||||||
|
{
|
||||||
|
*end = '\0';
|
||||||
|
strncpy0(section, start + 1, sizeof(section));
|
||||||
|
*prev_name = '\0';
|
||||||
|
}
|
||||||
|
else if (!error)
|
||||||
|
{
|
||||||
|
/* No ']' found on section line */
|
||||||
|
error = lineno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (*start && *start != ';')
|
||||||
|
{
|
||||||
|
/* Not a comment, must be a name=value pair */
|
||||||
|
end = find_char_or_comment(start, '=');
|
||||||
|
if (*end == '=')
|
||||||
|
{
|
||||||
|
*end = '\0';
|
||||||
|
name = rstrip(start);
|
||||||
|
value = lskip(end + 1);
|
||||||
|
end = find_char_or_comment(value, ';');
|
||||||
|
if (*end == ';')
|
||||||
|
*end = '\0';
|
||||||
|
rstrip(value);
|
||||||
|
|
||||||
fclose(file);
|
/* Valid name=value pair found, call handler */
|
||||||
|
strncpy0(prev_name, name, sizeof(prev_name));
|
||||||
|
if (!handler(user, section, name, value) && !error)
|
||||||
|
error = lineno;
|
||||||
|
}
|
||||||
|
else if (!error)
|
||||||
|
{
|
||||||
|
/* No '=' found on name=value line */
|
||||||
|
error = lineno;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
file.close();
|
||||||
|
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
@ -53,13 +53,9 @@
|
|||||||
* -------------------------------------------------------------------------
|
* -------------------------------------------------------------------------
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef __INI_H__
|
#ifndef GNSS_SDR_INI_H_
|
||||||
#define __INI_H__
|
#define GNSS_SDR_INI_H_
|
||||||
|
|
||||||
/* Make this header file easier to include in C++ code */
|
|
||||||
#ifdef __cplusplus
|
|
||||||
extern "C" {
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Parse given INI-style file. May have [section]s, name=value pairs
|
/* Parse given INI-style file. May have [section]s, name=value pairs
|
||||||
(whitespace stripped), and comments starting with ';' (semicolon). Section
|
(whitespace stripped), and comments starting with ';' (semicolon). Section
|
||||||
@ -84,8 +80,5 @@ int ini_parse(const char* filename,
|
|||||||
#define INI_ALLOW_MULTILINE 1
|
#define INI_ALLOW_MULTILINE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* __INI_H__ */
|
#endif // GNSS_SDR_INI_H_
|
||||||
|
Loading…
Reference in New Issue
Block a user