Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
MojitOS
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
sepia-pub
MojitOS
Merge requests
!7
Add memory counters and fix makefile
Code
Review changes
Check out branch
Download
Patches
Plain diff
Merged
Add memory counters and fix makefile
pr_final
into
devel
Overview
0
Commits
18
Pipelines
2
Changes
6
Merged
floreal.risso
requested to merge
pr_final
into
devel
2 years ago
Overview
0
Commits
18
Pipelines
2
Changes
6
Expand
Add the sensor "memory_counters"
Fix ld error
Fix make
0
0
Merge request reports
Viewing commit
a7c3287a
Prev
Next
Show latest version
6 files
+
313
−
282
Inline
Compare changes
Side-by-side
Inline
Show whitespace changes
Show one file at a time
Files
6
Search (e.g. *.vue) (Ctrl+P)
a7c3287a
fix make
· a7c3287a
floreal.risso
authored
2 years ago
lib/info_reader.c
0 → 100644
+
146
−
0
Options
#include
<info_reader.h>
void
set_value
(
Parser
*
parser
,
KeyFinder
*
key_finder
,
char
*
raw_value
)
{
GenericPointer
address
=
parser
->
storage
+
(
parser
->
storage_struct_size
*
parser
->
nb_stored
);
GenericPointer
value
=
key_finder
->
copy
(
raw_value
);
key_finder
->
set
(
address
,
value
);
}
unsigned
int
match
(
Parser
*
parser
,
char
*
line
,
KeyFinder
**
key_finder
,
char
**
raw_value
)
{
for
(
unsigned
int
i
=
0
;
i
<
parser
->
nb_keys
;
i
++
)
{
KeyFinder
*
finder
=
&
parser
->
keys
[
i
];
if
(
start_with
(
finder
->
key
,
line
))
{
char
*
value
=
NULL
;
char
*
key
=
NULL
;
split_on_delimiter
(
line
,
finder
->
delimiter
,
&
key
,
&
value
);
if
(
key
==
NULL
||
value
==
NULL
)
{
return
0
;
}
*
key_finder
=
finder
;
*
raw_value
=
value
;
return
1
;
}
}
return
0
;
}
unsigned
int
move_to_next
(
Parser
*
parser
)
{
parser
->
nb_stored
+=
1
;
if
(
parser
->
nb_stored
>=
parser
->
capacity
)
{
return
0
;
}
return
1
;
}
#define PAGE_SIZE 4096
ssize_t
buffer_getline
(
char
**
lineptr
,
FILE
*
stream
)
{
ssize_t
num_chars_read
=
0
;
static
char
buffer
[
PAGE_SIZE
]
=
{
0
};
if
(
!
lineptr
||
!
stream
)
{
return
-
1
;
}
while
(
1
)
{
int
ch
=
fgetc
(
stream
);
if
(
ch
==
EOF
)
{
if
(
num_chars_read
==
0
)
{
return
-
1
;
}
else
{
break
;
}
}
if
(
num_chars_read
==
PAGE_SIZE
-
1
)
{
return
-
1
;
}
buffer
[
num_chars_read
++
]
=
ch
;
if
(
ch
==
'\n'
)
{
break
;
}
}
buffer
[
num_chars_read
]
=
'\0'
;
*
lineptr
=
buffer
;
return
num_chars_read
;
}
unsigned
int
parse
(
Parser
*
parser
)
{
char
*
line
=
NULL
;
ssize_t
read
;
unsigned
int
key_assigned
=
0
;
while
((
read
=
buffer_getline
(
&
line
,
parser
->
file
))
!=
-
1
)
{
if
(
key_assigned
==
parser
->
nb_keys
&&
read
>
1
)
{
continue
;
}
else
if
(
read
==
1
)
{
if
(
!
move_to_next
(
parser
))
{
return
0
;
}
key_assigned
=
0
;
}
else
{
KeyFinder
*
key_finder
=
NULL
;
char
*
raw_value
=
NULL
;
replace_first
(
line
,
'\n'
,
'\0'
);
if
(
match
(
parser
,
line
,
&
key_finder
,
&
raw_value
))
{
set_value
(
parser
,
key_finder
,
raw_value
);
++
key_assigned
;
}
}
}
if
(
key_assigned
>
0
)
{
parser
->
nb_stored
++
;
}
return
1
;
}
void
replace_first
(
char
*
string
,
char
from
,
char
to
)
{
for
(
int
i
=
0
;
string
[
i
]
!=
'\0'
;
i
++
)
{
if
(
string
[
i
]
==
from
)
{
string
[
i
]
=
to
;
break
;
}
}
}
void
split_on_delimiter
(
char
*
string
,
const
char
*
delimiter
,
char
**
key
,
char
**
value
)
{
*
key
=
NULL
;
*
value
=
NULL
;
size_t
delimiter_len
=
strlen
(
delimiter
);
char
*
start_delimiter
=
strstr
(
string
,
delimiter
);
if
(
start_delimiter
!=
NULL
)
{
*
start_delimiter
=
'\0'
;
*
key
=
string
;
*
value
=
start_delimiter
+
delimiter_len
;
}
}
bool
start_with
(
const
char
*
prefix
,
const
char
*
string
)
{
if
(
prefix
==
NULL
||
string
==
NULL
)
{
return
false
;
}
size_t
prefix_len
=
strlen
(
prefix
);
size_t
string_len
=
strlen
(
string
);
if
(
string_len
<
prefix_len
)
{
return
false
;
}
else
{
return
memcmp
(
prefix
,
string
,
prefix_len
)
==
0
;
}
}
Loading