|
@@ -514,40 +514,6 @@ static int img_commit(int argc, char **argv)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Checks whether the sector is not a zero sector.
|
|
|
|
- *
|
|
|
|
- * Attention! The len must be a multiple of 4 * sizeof(long) due to
|
|
|
|
- * restriction of optimizations in this function.
|
|
|
|
- */
|
|
|
|
-static int is_not_zero(const uint8_t *sector, int len)
|
|
|
|
-{
|
|
|
|
- /*
|
|
|
|
- * Use long as the biggest available internal data type that fits into the
|
|
|
|
- * CPU register and unroll the loop to smooth out the effect of memory
|
|
|
|
- * latency.
|
|
|
|
- */
|
|
|
|
-
|
|
|
|
- int i;
|
|
|
|
- long d0, d1, d2, d3;
|
|
|
|
- const long * const data = (const long *) sector;
|
|
|
|
-
|
|
|
|
- len /= sizeof(long);
|
|
|
|
-
|
|
|
|
- for(i = 0; i < len; i += 4) {
|
|
|
|
- d0 = data[i + 0];
|
|
|
|
- d1 = data[i + 1];
|
|
|
|
- d2 = data[i + 2];
|
|
|
|
- d3 = data[i + 3];
|
|
|
|
-
|
|
|
|
- if (d0 || d1 || d2 || d3) {
|
|
|
|
- return 1;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return 0;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Returns true iff the first sector pointed to by 'buf' contains at least
|
|
* Returns true iff the first sector pointed to by 'buf' contains at least
|
|
* a non-NUL byte.
|
|
* a non-NUL byte.
|
|
@@ -557,20 +523,22 @@ static int is_not_zero(const uint8_t *sector, int len)
|
|
*/
|
|
*/
|
|
static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
|
|
static int is_allocated_sectors(const uint8_t *buf, int n, int *pnum)
|
|
{
|
|
{
|
|
- int v, i;
|
|
|
|
|
|
+ bool is_zero;
|
|
|
|
+ int i;
|
|
|
|
|
|
if (n <= 0) {
|
|
if (n <= 0) {
|
|
*pnum = 0;
|
|
*pnum = 0;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
- v = is_not_zero(buf, 512);
|
|
|
|
|
|
+ is_zero = buffer_is_zero(buf, 512);
|
|
for(i = 1; i < n; i++) {
|
|
for(i = 1; i < n; i++) {
|
|
buf += 512;
|
|
buf += 512;
|
|
- if (v != is_not_zero(buf, 512))
|
|
|
|
|
|
+ if (is_zero != buffer_is_zero(buf, 512)) {
|
|
break;
|
|
break;
|
|
|
|
+ }
|
|
}
|
|
}
|
|
*pnum = i;
|
|
*pnum = i;
|
|
- return v;
|
|
|
|
|
|
+ return !is_zero;
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
@@ -955,7 +923,7 @@ static int img_convert(int argc, char **argv)
|
|
if (n < cluster_sectors) {
|
|
if (n < cluster_sectors) {
|
|
memset(buf + n * 512, 0, cluster_size - n * 512);
|
|
memset(buf + n * 512, 0, cluster_size - n * 512);
|
|
}
|
|
}
|
|
- if (is_not_zero(buf, cluster_size)) {
|
|
|
|
|
|
+ if (!buffer_is_zero(buf, cluster_size)) {
|
|
ret = bdrv_write_compressed(out_bs, sector_num, buf,
|
|
ret = bdrv_write_compressed(out_bs, sector_num, buf,
|
|
cluster_sectors);
|
|
cluster_sectors);
|
|
if (ret != 0) {
|
|
if (ret != 0) {
|