Rob Mosher <nyt-open...@countercultured.net> writes:

> +#define BOOTCOUNT_MAGIC      0x20110811
> +
> +struct bootcounter {
> +     uint32_t magic;
> +     uint32_t count;
> +     uint32_t checksum;
> +};

Maybe make it clear that these numbers are stored in little endian
order?  Or will that always be the native endianness?

> +static char page[2048];
> +
> +int mtd_resetbc(const char *mtd)
> +{
> +     struct mtd_info_user mtd_info;
> +     struct bootcounter *curr = (struct bootcounter *)page;
> +     unsigned int i;
> +     int last_count = 0;
> +     int num_bc;
> +     int fd;
> +     int ret;
> +
> +     fd = mtd_check_open(mtd);
> +
> +     if (ioctl(fd, MEMGETINFO, &mtd_info) < 0) {
> +             fprintf(stderr, "failed to get mtd info!\n");
> +             return -1;
> +     }
> +
> +     num_bc = mtd_info.size / mtd_info.writesize;
> +
> +     for (i = 0; i < num_bc; i++) {
> +             pread(fd, curr, sizeof(*curr), i * mtd_info.writesize);
> +
> +             if (curr->magic != BOOTCOUNT_MAGIC && curr->magic != 
> 0xffffffff) {
> +                     fprintf(stderr, "unexpected magic %08x, bailing out\n", 
> curr->magic);
> +                     goto out;
> +             }

Maybe verify the checksum sanity as well as an extra failsafe?

> +             mtd resetbc s_env

What good does it do to make the partition name an input parameter?
It's just as static as the BOOTCOUNT_MAGIC, AFAICT.


Bjørn
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to