On 5/24/23 17:00, Eric Blake wrote:
While reviewing the previous whitespace-only patch, I noticed
several
casts that are semantically unnecessary in C:
- converting pointers to and from void* does not need a cast except
for function pointers or when also casting away const (different
from C++ where casts to or from void* are required for type safety);
includes cases like python PyCapsule code which uses void*
- casting away const on a string literal (in C, string literals are
typed 'char *', different from C++ where they are 'const char *';
that said, C says it is still undefined behavior to modify their
contents, so string literals should generally be only assigned to
'const char *' variables or passed to functions that promise not to
modify contents); includes cases like ocaml's struct
custom_operations using 'const char *' as its member type (where
casting away const just to re-add it is pointless)
- casts used to document what would otherwise be implicit type
conversions when assigning to integers of a different type or
passing function parameters not through varargs. While this can be
useful for documentation purposes, it can also mask bugs when the
cast uses the wrong intermediate type only to be implicitly
converted back to the destination type, and it is often easier to
use optional compiler warning flags to catch instances of unintended
truncation or sign extension by implicit conversions.
Minimizing semantically unneeded casts lets the remaining casts stand
out for why they are necessary: casting aways const, casts between
pointer aliases (such as struct sockaddr*, char* vs unsigned char*,
...), and scalars passed through vargs in printf-like functions.
Signed-off-by: Eric Blake <eblake(a)redhat.com>
---
generator/Python.ml | 2 +-
generator/states-connect-socket-activation.c | 2 +-
generator/states-issue-command.c | 2 +-
lib/utils.c | 4 ++--
python/handle.c | 2 +-
ocaml/nbd-c.h | 6 +++---
tests/opt-set-meta.c | 2 +-
copy/main.c | 6 +++---
fuse/nbdfuse.c | 4 ++--
fuse/operations.c | 2 +-
ublk/nbdublk.c | 4 ++--
11 files changed, 18 insertions(+), 18 deletions(-)
diff --git a/generator/Python.ml b/generator/Python.ml
index b73f9782..c81878de 100644
--- a/generator/Python.ml
+++ b/generator/Python.ml
@@ -49,7 +49,7 @@ let
{
assert (obj);
assert (obj != Py_None);
- return (struct nbd_handle *)PyCapsule_GetPointer(obj, \"nbd_handle\");
+ return PyCapsule_GetPointer(obj, \"nbd_handle\");
}
/* nbd.Error exception. */
diff --git a/generator/states-connect-socket-activation.c
b/generator/states-connect-socket-activation.c
index 98a39c0e..40a3528c 100644
--- a/generator/states-connect-socket-activation.c
+++ b/generator/states-connect-socket-activation.c
@@ -294,7 +294,7 @@ CONNECT_SA.START:
char buf[32];
const char *v =
- nbd_internal_fork_safe_itoa ((long)getpid (), buf, sizeof buf);
+ nbd_internal_fork_safe_itoa (getpid (), buf, sizeof buf);
NBD_INTERNAL_FORK_SAFE_ASSERT (strlen (v) <= sact_var[pid_ofs].value_len);
strcpy (env.ptr[pid_ofs] + sact_var[pid_ofs].prefix_len, v);
diff --git a/generator/states-issue-command.c b/generator/states-issue-command.c
index 34ef4652..111e131c 100644
--- a/generator/states-issue-command.c
+++ b/generator/states-issue-command.c
@@ -46,7 +46,7 @@ ISSUE_COMMAND.START:
h->request.type = htobe16 (cmd->type);
h->request.handle = htobe64 (cmd->cookie);
h->request.offset = htobe64 (cmd->offset);
- h->request.count = htobe32 ((uint32_t)cmd->count);
+ h->request.count = htobe32 (cmd->count);
h->chunks_sent++;
h->wbuf = &h->request;
h->wlen = sizeof (h->request);
diff --git a/lib/utils.c b/lib/utils.c
index e3e13cdd..5df5ae51 100644
--- a/lib/utils.c
+++ b/lib/utils.c
@@ -154,7 +154,7 @@ nbd_internal_set_querylist (struct nbd_handle *h, char **queries)
const char *
nbd_internal_fork_safe_itoa (long v, char *buf, size_t bufsize)
{
- unsigned long uv = (unsigned long)v;
+ unsigned long uv = v;
size_t i = bufsize - 1;
bool neg = false;
@@ -282,7 +282,7 @@ nbd_internal_fork_safe_perror (const char *s)
#endif
#endif
if (!m)
- m = nbd_internal_fork_safe_itoa ((long)errno, buf, sizeof buf);
+ m = nbd_internal_fork_safe_itoa (errno, buf, sizeof buf);
xwritel (STDERR_FILENO, s, ": ", m, "\n", (char *)NULL);
/* Restore original errno in case it was disturbed by the system
diff --git a/python/handle.c b/python/handle.c
index 8ff6ba81..548f2dfe 100644
--- a/python/handle.c
+++ b/python/handle.c
@@ -46,7 +46,7 @@ static inline PyObject *
put_handle (struct nbd_handle *h)
{
assert (h);
- return PyCapsule_New ((void *)h, "nbd_handle", NULL);
+ return PyCapsule_New (h, "nbd_handle", NULL);
}
PyObject *
diff --git a/ocaml/nbd-c.h b/ocaml/nbd-c.h
index 0cbe36d1..e3abb912 100644
--- a/ocaml/nbd-c.h
+++ b/ocaml/nbd-c.h
@@ -49,7 +49,7 @@ static inline value
caml_alloc_initialized_string (mlsize_t len, const char *p)
{
value sv = caml_alloc_string (len);
- memcpy ((char *)String_val (sv), p, len);
+ memcpy (String_val (sv), p, len);
return sv;
}
#endif
@@ -70,7 +70,7 @@ extern void nbd_internal_ocaml_exception_in_wrapper (const char *,
value);
#define NBD_val(v) (*((struct nbd_handle **)Data_custom_val (v)))
static struct custom_operations libnbd_custom_operations = {
- (char *)"libnbd_custom_operations",
+ "libnbd_custom_operations",
nbd_internal_ocaml_handle_finalize,
custom_compare_default,
custom_hash_default,
@@ -110,7 +110,7 @@ struct nbd_buffer {
#define NBD_buffer_val(v) ((struct nbd_buffer *)Data_custom_val (v))
static struct custom_operations nbd_buffer_custom_operations = {
- (char *)"nbd_buffer_custom_operations",
+ "nbd_buffer_custom_operations",
nbd_internal_ocaml_buffer_finalize,
custom_compare_default,
custom_hash_default,
diff --git a/tests/opt-set-meta.c b/tests/opt-set-meta.c
index 1bd60a9c..06f503af 100644
--- a/tests/opt-set-meta.c
+++ b/tests/opt-set-meta.c
@@ -219,7 +219,7 @@ main (int argc, char *argv[])
* or newer with its --no-sr kill switch.
*/
requires ("nbdkit --no-sr --help");
- args[ARRAY_SIZE (args) - 2] = (char *)"--no-sr";
+ args[ARRAY_SIZE (args) - 2] = "--no-sr";
nbd = nbd_create ();
if (nbd == NULL ||
nbd_set_opt_mode (nbd, true) == -1 ||
diff --git a/copy/main.c b/copy/main.c
index 391c0c4f..9449440e 100644
--- a/copy/main.c
+++ b/copy/main.c
@@ -371,7 +371,7 @@ main (int argc, char *argv[])
#else
t = 1;
#endif
- threads = (unsigned)t;
+ threads = t;
}
if (synchronous)
@@ -534,7 +534,7 @@ open_local (const char *filename, direction d)
}
if (S_ISREG (stat.st_mode)) /* Regular file. */
return file_create (filename, fd,
- stat.st_size, (uint64_t)stat.st_blksize, false, d);
+ stat.st_size, stat.st_blksize, false, d);
else if (S_ISBLK (stat.st_mode)) { /* Block device. */
unsigned int blkioopt;
@@ -549,7 +549,7 @@ open_local (const char *filename, direction d)
#endif
return file_create (filename, fd,
- stat.st_size, (uint64_t)blkioopt, true, d);
+ stat.st_size, blkioopt, true, d);
}
else { /* Probably stdin/stdout, a pipe or a socket. */
synchronous = true; /* Force synchronous mode for pipes. */
diff --git a/fuse/nbdfuse.c b/fuse/nbdfuse.c
index 491f6db8..35d5ffac 100644
--- a/fuse/nbdfuse.c
+++ b/fuse/nbdfuse.c
@@ -415,7 +415,7 @@ main (int argc, char *argv[])
handles_append (&nbd, h); /* reserved above, so can't fail */
}
}
- connections = (unsigned)nbd.len;
+ connections = nbd.len;
if (verbose)
fprintf (stderr, "nbdfuse: connections=%u\n", connections);
@@ -424,7 +424,7 @@ main (int argc, char *argv[])
fprintf (stderr, "%s\n", nbd_get_error ());
exit (EXIT_FAILURE);
}
- size = (uint64_t)ssize;
+ size = ssize;
/* If the remote NBD server is readonly, then act as if the '-r'
* flag was given on the nbdfuse command line.
diff --git a/fuse/operations.c b/fuse/operations.c
index 2d0634dc..e487d150 100644
--- a/fuse/operations.c
+++ b/fuse/operations.c
@@ -396,7 +396,7 @@ nbdfuse_read (const char *path, char *buf,
CHECK_NBD_ASYNC_ERROR (nbd_aio_pread (h, buf, count, offset, cb, 0));
- return (int)count;
+ return count;
}
static int
diff --git a/ublk/nbdublk.c b/ublk/nbdublk.c
index b85ac609..2f097f3e 100644
--- a/ublk/nbdublk.c
+++ b/ublk/nbdublk.c
@@ -347,7 +347,7 @@ main (int argc, char *argv[])
handles_append (&nbd, h); /* reserved above, so can't fail */
}
}
- connections = (unsigned)nbd.len;
+ connections = nbd.len;
/* Get the size and preferred block sizes. */
rs = nbd_get_size (nbd.ptr[0]);
@@ -355,7 +355,7 @@ main (int argc, char *argv[])
fprintf (stderr, "%s\n", nbd_get_error ());
exit (EXIT_FAILURE);
}
- size = (uint64_t)rs;
+ size = rs;
rs = nbd_get_block_size (nbd.ptr[0], LIBNBD_SIZE_MAXIMUM);
if (rs <= 0 || rs > 64 * 1024 * 1024)
Reviewed-by: Laszlo Ersek <lersek(a)redhat.com>