52 lines
876 B
C
52 lines
876 B
C
#include <common.h>
|
|
#include <command.h>
|
|
#include <linux/stat.h>
|
|
#include <malloc.h>
|
|
#include <fs.h>
|
|
|
|
static int do_alternate (cmd_tbl_t *cmdtp, int argc, char *argv[])
|
|
{
|
|
void *buf;
|
|
size_t size;
|
|
ulong *ptr, val = 0, bitcount = 0;
|
|
|
|
if (argc != 2) {
|
|
u_boot_cmd_usage(cmdtp);
|
|
return 1;
|
|
}
|
|
|
|
buf = read_file(argv[1], &size);
|
|
if (!buf)
|
|
return 1;
|
|
|
|
ptr = buf;
|
|
|
|
while ((ulong)ptr <= (ulong)buf + size && !(val = *ptr++))
|
|
bitcount += 32;
|
|
|
|
if (val) {
|
|
do {
|
|
if (val & 1)
|
|
break;
|
|
bitcount++;
|
|
} while (val >>= 1);
|
|
}
|
|
|
|
printf("bitcount : %d\n", bitcount);
|
|
|
|
free(buf);
|
|
return (bitcount & 1) ? 2 : 3;
|
|
}
|
|
|
|
static __maybe_unused char cmd_alternate_help[] =
|
|
"Usage: alternate <file>\n"
|
|
"\n";
|
|
|
|
U_BOOT_CMD_START(alternate)
|
|
.maxargs = CONFIG_MAXARGS,
|
|
.cmd = do_alternate,
|
|
.usage = "count zero bits in a file",
|
|
U_BOOT_CMD_HELP(cmd_alternate_help)
|
|
U_BOOT_CMD_END
|
|
|