Discussion:
How to handle untagged hexvalues in systemd code?
(too old to reply)
Olaf Hering
2018-01-15 17:44:41 UTC
Permalink
Raw Message
I submitted a correct and tested patch via https://github.com/systemd/systemd/pull/7581, which was using sscanf("0028f0", "%x",&val). During discussion I was soft-forced to use systemd helper functions. These (strtoull based) helpers expect "0x...", which sysfs does not provide. As a result 575e658 is broken. My fault, I did not doublecheck the updated submission...

So, how is one supposed to handle untagged hexvalues? Invent a new helper, or prepend "0x" if missing, or just use sscanf?

Olaf
Zbigniew Jędrzejewski-Szmek
2018-01-16 09:26:43 UTC
Permalink
Raw Message
Post by Olaf Hering
I submitted a correct and tested patch via https://github.com/systemd/systemd/pull/7581, which was using sscanf("0028f0", "%x",&val). During discussion I was soft-forced to use systemd helper functions. These (strtoull based) helpers expect "0x...", which sysfs does not provide. As a result 575e658 is broken. My fault, I did not doublecheck the updated submission...
I merged the PR to use sscanf. After all, it works now, it's unlikely for the
kernel to change that to something incompatible.

Zbyszek
Post by Olaf Hering
So, how is one supposed to handle untagged hexvalues? Invent a new helper, or prepend "0x" if missing, or just use sscanf?
Olaf
_______________________________________________
systemd-devel mailing list
https://lists.freedesktop.org/mailman/listinfo/systemd-devel
Lennart Poettering
2018-01-16 10:41:21 UTC
Permalink
Raw Message
Post by Olaf Hering
I submitted a correct and tested patch via
https://github.com/systemd/systemd/pull/7581, which was using
sscanf("0028f0", "%x",&val). During discussion I was soft-forced to
use systemd helper functions. These (strtoull based) helpers expect
"0x...", which sysfs does not provide. As a result 575e658 is
broken. My fault, I did not doublecheck the updated submission...
So, how is one supposed to handle untagged hexvalues? Invent a new
helper, or prepend "0x" if missing, or just use sscanf?
We have very few cases of that so far, hence there is no
helper. Adding a helper is probably worth it if there are multiple
users and until then sscanf() is fine, as long as it is done safely
with all parsing error caught.

We have the safe_atou() and friends mostly because parsing things in C
with strtoul() is really nasty if you want to catch all errors
properly. libc strtoul() is not precisely an easy-to-use API.

Lennart
--
Lennart Poettering, Red Hat
Loading...