Commit ea6042b4 authored by Alessandro Rubini's avatar Alessandro Rubini

diag.c: calculate a magic number at build time

Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 6eb9e1bd
...@@ -7,6 +7,10 @@ ...@@ -7,6 +7,10 @@
#include <stdarg.h> #include <stdarg.h>
#include <ppsi/ppsi.h> #include <ppsi/ppsi.h>
#ifndef ARRAY_SIZE
#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
#endif
static char *thing_name[] = { static char *thing_name[] = {
[pp_dt_fsm] = "diag-fsm", [pp_dt_fsm] = "diag-fsm",
[pp_dt_time] = "diag-time", [pp_dt_time] = "diag-time",
...@@ -59,8 +63,9 @@ unsigned long pp_diag_parse(char *diaglevel) ...@@ -59,8 +63,9 @@ unsigned long pp_diag_parse(char *diaglevel)
{ {
unsigned long res = 0; unsigned long res = 0;
int i = 28; /* number of bits to shift the nibble: 28..31 is first */ int i = 28; /* number of bits to shift the nibble: 28..31 is first */
int nthings = ARRAY_SIZE(thing_name);
while (*diaglevel && i >= 4) { while (*diaglevel && i >= (32 - 4 * nthings)) {
if (*diaglevel < '0' || *diaglevel > '3') if (*diaglevel < '0' || *diaglevel > '3')
break; break;
res |= ((*diaglevel - '0') << i); res |= ((*diaglevel - '0') << i);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment