#include #include #include #include #include #define MAGIC 0x19691228 static int do_alternate(struct command *cmdtp, int argc, char *argv[]) { void *buf; size_t size; ulong *ptr, val = 0, bitcount = 0; if (argc != 2) return COMMAND_ERROR_USAGE; buf = read_file(argv[1], &size); if (!buf) return 1; ptr = buf; if ((*ptr) != MAGIC) { printf("Wrong magic! Expected 0x%08x, got 0x%08x.\n", MAGIC, *ptr); return 1; } ptr++; 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) ? 3 : 2; } static const __maybe_unused char cmd_alternate_help[] = "Usage: alternate " "\n"; BAREBOX_CMD_START(alternate) .cmd = do_alternate, .usage = "count zero bits in a file", BAREBOX_CMD_HELP(cmd_alternate_help) BAREBOX_CMD_END