Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
htop
Commits
d3f57526
Commit
d3f57526
authored
Aug 11, 2016
by
Hisham Muhammad
Committed by
GitHub
Aug 11, 2016
Browse files
Merge pull request #537 from Explorer09/string-utils
Optimize Strings_startWith()
parents
b269eb24
bf35921a
Changes
4
Hide whitespace changes
Inline
Side-by-side
StringUtils.c
View file @
d3f57526
...
...
@@ -17,10 +17,15 @@ in the source distribution for its full text.
/*{
#include <stdio.h>
#define String_startsWith(s, match) (str
str
((s),
(match)) ==
(s)
)
#define String_startsWith(s, match) (str
ncmp
((s),
(match),strlen
(match)) ==
0
)
#define String_contains_i(s1, s2) (strcasestr(s1, s2) != NULL)
}*/
/*
* String_startsWith gives better performance if strlen(match) can be computed
* at compile time (e.g. when they are immutable string literals). :)
*/
char
*
String_cat
(
const
char
*
s1
,
const
char
*
s2
)
{
int
l1
=
strlen
(
s1
);
int
l2
=
strlen
(
s2
);
...
...
StringUtils.h
View file @
d3f57526
...
...
@@ -11,9 +11,14 @@ in the source distribution for its full text.
#include <stdio.h>
#define String_startsWith(s, match) (str
str
((s),
(match)) ==
(s)
)
#define String_startsWith(s, match) (str
ncmp
((s),
(match),strlen
(match)) ==
0
)
#define String_contains_i(s1, s2) (strcasestr(s1, s2) != NULL)
/*
* String_startsWith gives better performance if strlen(match) can be computed
* at compile time (e.g. when they are immutable string literals). :)
*/
char
*
String_cat
(
const
char
*
s1
,
const
char
*
s2
);
char
*
String_trim
(
const
char
*
in
);
...
...
linux/Battery.c
View file @
d3f57526
...
...
@@ -179,25 +179,6 @@ static inline ssize_t xread(int fd, void *buf, size_t count) {
}
}
/**
* Returns a pointer to the suffix of `str` if its beginning matches `prefix`.
* Returns NULL if the prefix does not match.
* Examples:
* match("hello world", "hello "); -> "world"
* match("hello world", "goodbye "); -> NULL
*/
static
inline
const
char
*
match
(
const
char
*
str
,
const
char
*
prefix
)
{
for
(;;)
{
if
(
*
prefix
==
'\0'
)
{
return
str
;
}
if
(
*
prefix
!=
*
str
)
{
return
NULL
;
}
prefix
++
;
str
++
;
}
}
static
void
Battery_getSysData
(
double
*
level
,
ACPresence
*
isOnAC
)
{
*
level
=
0
;
...
...
@@ -240,6 +221,8 @@ static void Battery_getSysData(double* level, ACPresence* isOnAC) {
bool
full
=
false
;
bool
now
=
false
;
while
((
line
=
strsep
(
&
buf
,
"
\n
"
))
!=
NULL
)
{
#define match(str,prefix) \
(String_startsWith(str,prefix) ? (str) + strlen(prefix) : NULL)
const
char
*
ps
=
match
(
line
,
"POWER_SUPPLY_"
);
if
(
!
ps
)
{
continue
;
...
...
@@ -266,6 +249,7 @@ static void Battery_getSysData(double* level, ACPresence* isOnAC) {
continue
;
}
}
#undef match
}
else
if
(
entryName
[
0
]
==
'A'
)
{
if
(
*
isOnAC
!=
AC_ERROR
)
{
continue
;
...
...
linux/Battery.h
View file @
d3f57526
...
...
@@ -29,13 +29,6 @@ Linux battery readings written by Ian P. Hands (iphands@gmail.com, ihands@redhat
// READ FROM /sys
// ----------------------------------------
/**
* Returns a pointer to the suffix of `str` if its beginning matches `prefix`.
* Returns NULL if the prefix does not match.
* Examples:
* match("hello world", "hello "); -> "world"
* match("hello world", "goodbye "); -> NULL
*/
void
Battery_getData
(
double
*
level
,
ACPresence
*
isOnAC
);
#endif
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