That reminds me, we should be avoiding types like uint64_t unless
they're really needed. The fiemap code is bound tightly to the Linux
kernel so I guess uint64_t is OK there, but the portable code should use
higher-level types like off_t. I installed the attached patch. No
doubt further cleanups like this could be made but one thing at a time.
From 46418ecec04ca61647d6750a0a0fe862f0ae69c1 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email protected]>
Date: Fri, 22 Aug 2014 12:07:11 -0700
Subject: [PATCH] maint: avoid int64_t and similar types unless they're needed
C11 doesn't require them, even POSIX doesn't strictly require the
64-bit versions, and it makes the code a bit clearer if they're
used only when needed.
* src/copy.c (write_zeros, extent_copy):
* src/extent-scan.h (struct extent_info.ext_length):
Use off_t, not uint64_t, for a value derived from a file offset.
* src/extent-scan.h (struct extent_info.ext_flags)
Prefer plain unsigned int to uint32_t where either will do.
(struct extent_scan.ei_count):
Use size_t, not uint32_t, for a value bounded by SIZE_MAX.
* src/factor.c (MAGIC64, MAGIC63, MAGIC65):
Remove unnecessary casts to uint64_t.
---
src/copy.c | 10 +++++-----
src/extent-scan.h | 8 ++++----
src/factor.c | 6 +++---
3 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/copy.c b/src/copy.c
index 26d5bdd..a9561c6 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -251,7 +251,7 @@ clone_file (int dest_fd, int src_fd)
/* Write N_BYTES zero bytes to file descriptor FD. Return true if successful.
Upon write failure, set errno and return false. */
static bool
-write_zeros (int fd, uint64_t n_bytes)
+write_zeros (int fd, off_t n_bytes)
{
static char *zeros;
static size_t nz = IO_BUFSIZE;
@@ -272,7 +272,7 @@ write_zeros (int fd, uint64_t n_bytes)
while (n_bytes)
{
- uint64_t n = MIN (nz, n_bytes);
+ size_t n = MIN (nz, n_bytes);
if ((full_write (fd, zeros, n)) != n)
return false;
n_bytes -= n;
@@ -296,7 +296,7 @@ extent_copy (int src_fd, int dest_fd, char *buf, size_t
buf_size,
{
struct extent_scan scan;
off_t last_ext_start = 0;
- uint64_t last_ext_len = 0;
+ off_t last_ext_len = 0;
/* Keep track of the output position.
We may need this at the end, for a final ftruncate. */
@@ -330,8 +330,8 @@ extent_copy (int src_fd, int dest_fd, char *buf, size_t
buf_size,
for (i = 0; i < scan.ei_count || empty_extent; i++)
{
off_t ext_start;
- uint64_t ext_len;
- uint64_t hole_size;
+ off_t ext_len;
+ off_t hole_size;
if (i < scan.ei_count)
{
diff --git a/src/extent-scan.h b/src/extent-scan.h
index fa80034..73202a9 100644
--- a/src/extent-scan.h
+++ b/src/extent-scan.h
@@ -26,10 +26,10 @@ struct extent_info
off_t ext_logical;
/* Extent length. */
- uint64_t ext_length;
+ off_t ext_length;
/* Extent flags, use it for FIEMAP only, or set it to zero. */
- uint32_t ext_flags;
+ unsigned int ext_flags;
};
/* Structure used to reserve extent scan information per file. */
@@ -42,10 +42,10 @@ struct extent_scan
off_t scan_start;
/* Flags to use for scan. */
- uint32_t fm_flags;
+ unsigned int fm_flags;
/* How many extent info returned for a scan. */
- uint32_t ei_count;
+ size_t ei_count;
/* If true, fall back to a normal copy, either set by the
failure of ioctl(2) for FIEMAP or lseek(2) with SEEK_DATA. */
diff --git a/src/factor.c b/src/factor.c
index 63924d5..f7beaeb 100644
--- a/src/factor.c
+++ b/src/factor.c
@@ -1811,9 +1811,9 @@ isqrt2 (uintmax_t nh, uintmax_t nl)
}
/* MAGIC[N] has a bit i set iff i is a quadratic residue mod N. */
-#define MAGIC64 ((uint64_t) 0x0202021202030213ULL)
-#define MAGIC63 ((uint64_t) 0x0402483012450293ULL)
-#define MAGIC65 ((uint64_t) 0x218a019866014613ULL)
+#define MAGIC64 0x0202021202030213ULL
+#define MAGIC63 0x0402483012450293ULL
+#define MAGIC65 0x218a019866014613ULL
#define MAGIC11 0x23b
/* Return the square root if the input is a square, otherwise 0. */
--
1.9.3