Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
M
mpd
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Иван Мажукин
mpd
Commits
378ebad1
Commit
378ebad1
authored
Jan 30, 2013
by
Max Kellermann
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ConfigData: use simple linked list instead of GSList
parent
e44e0fab
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
38 additions
and
40 deletions
+38
-40
ConfigData.cxx
src/ConfigData.cxx
+2
-1
ConfigData.hxx
src/ConfigData.hxx
+8
-3
ConfigFile.cxx
src/ConfigFile.cxx
+18
-5
ConfigGlobal.cxx
src/ConfigGlobal.cxx
+10
-31
No files found.
src/ConfigData.cxx
View file @
378ebad1
...
...
@@ -32,10 +32,11 @@ extern "C" {
#include <stdlib.h>
config_param
::
config_param
(
const
char
*
_value
,
int
_line
)
:
value
(
g_strdup
(
_value
)),
line
(
_line
)
{}
:
next
(
nullptr
),
value
(
g_strdup
(
_value
)),
line
(
_line
)
{}
config_param
::~
config_param
()
{
delete
next
;
g_free
(
value
);
}
...
...
src/ConfigData.hxx
View file @
378ebad1
...
...
@@ -25,7 +25,6 @@
#include "gcc.h"
#ifdef __cplusplus
#include <glib.h>
#include <string>
#include <array>
#include <vector>
...
...
@@ -54,6 +53,12 @@ struct block_param {
#endif
struct
config_param
{
/**
* The next config_param with the same name. The destructor
* deletes the whole chain.
*/
struct
config_param
*
next
;
char
*
value
;
unsigned
int
line
;
...
...
@@ -67,7 +72,7 @@ struct config_param {
bool
used
;
config_param
(
int
_line
=-
1
)
:
value
(
nullptr
),
line
(
_line
),
used
(
false
)
{}
:
next
(
nullptr
),
value
(
nullptr
),
line
(
_line
),
used
(
false
)
{}
gcc_nonnull_all
config_param
(
const
char
*
_value
,
int
_line
=-
1
);
...
...
@@ -92,7 +97,7 @@ struct config_param {
#ifdef __cplusplus
struct
ConfigData
{
std
::
array
<
GSList
*
,
std
::
size_t
(
CONF_MAX
)
>
params
;
std
::
array
<
config_param
*
,
std
::
size_t
(
CONF_MAX
)
>
params
;
};
#endif
...
...
src/ConfigFile.cxx
View file @
378ebad1
...
...
@@ -137,6 +137,19 @@ config_read_block(FILE *fp, int *count, char *string, GError **error_r)
}
}
gcc_nonnull_all
static
void
Append
(
config_param
*&
head
,
config_param
*
p
)
{
assert
(
p
->
next
==
nullptr
);
config_param
**
i
=
&
head
;
while
(
*
i
!=
nullptr
)
i
=
&
(
*
i
)
->
next
;
*
i
=
p
;
}
static
bool
ReadConfigFile
(
ConfigData
&
config_data
,
FILE
*
fp
,
GError
**
error_r
)
{
...
...
@@ -179,12 +192,12 @@ ReadConfigFile(ConfigData &config_data, FILE *fp, GError **error_r)
return
false
;
}
const
unsigned
i
=
ParseConfigOptionName
(
name
);
const
unsigned
i
=
unsigned
(
o
);
const
ConfigTemplate
&
option
=
config_templates
[
i
];
GSList
*&
params
=
config_data
.
params
[
i
];
config_param
*&
head
=
config_data
.
params
[
i
];
if
(
params
!=
NULL
&&
!
option
.
repeatable
)
{
param
=
(
struct
config_param
*
)
params
->
data
;
if
(
head
!=
nullptr
&&
!
option
.
repeatable
)
{
param
=
head
;
g_set_error
(
error_r
,
config_quark
(),
0
,
"config parameter
\"
%s
\"
is first defined "
"on line %i and redefined on line %i
\n
"
,
...
...
@@ -244,7 +257,7 @@ ReadConfigFile(ConfigData &config_data, FILE *fp, GError **error_r)
param
=
new
config_param
(
value
,
count
);
}
params
=
g_slist_append
(
params
,
param
);
Append
(
head
,
param
);
}
return
true
;
...
...
src/ConfigGlobal.cxx
View file @
378ebad1
...
...
@@ -39,20 +39,10 @@ extern "C" {
static
ConfigData
config_data
;
static
void
config_param_free_callback
(
gpointer
data
,
G_GNUC_UNUSED
gpointer
user_data
)
{
struct
config_param
*
param
=
(
struct
config_param
*
)
data
;
delete
param
;
}
void
config_global_finish
(
void
)
{
for
(
auto
i
:
config_data
.
params
)
{
g_slist_foreach
(
i
,
config_param_free_callback
,
NULL
);
g_slist_free
(
i
);
}
for
(
auto
i
:
config_data
.
params
)
delete
i
;
}
void
config_global_init
(
void
)
...
...
@@ -66,10 +56,8 @@ ReadConfigFile(const Path &path, GError **error_r)
}
static
void
config_param_check
(
gpointer
data
,
G_GNUC_UNUSED
gpointer
user_data
)
Check
(
const
config_param
*
param
)
{
struct
config_param
*
param
=
(
struct
config_param
*
)
data
;
if
(
!
param
->
used
)
/* this whole config_param was not queried at all -
the feature might be disabled at compile time?
...
...
@@ -86,27 +74,18 @@ config_param_check(gpointer data, G_GNUC_UNUSED gpointer user_data)
void
config_global_check
(
void
)
{
for
(
auto
i
:
config_data
.
params
)
g_slist_foreach
(
i
,
config_param_check
,
NULL
);
for
(
const
config_param
*
p
=
i
;
p
!=
nullptr
;
p
=
p
->
next
)
Check
(
p
);
}
const
struct
config_param
*
config_get_next_param
(
ConfigOption
option
,
const
struct
config_param
*
last
)
{
GSList
*
node
=
config_data
.
params
[
unsigned
(
option
)];
if
(
last
)
{
node
=
g_slist_find
(
node
,
last
);
if
(
node
==
NULL
)
return
NULL
;
node
=
g_slist_next
(
node
);
}
if
(
node
==
NULL
)
return
NULL
;
struct
config_param
*
param
=
(
struct
config_param
*
)
node
->
data
;
param
->
used
=
true
;
config_param
*
param
=
last
!=
nullptr
?
last
->
next
:
config_data
.
params
[
unsigned
(
option
)];
if
(
param
!=
nullptr
)
param
->
used
=
true
;
return
param
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment