Git development
 help / color / mirror / Atom feed
* [PATCH] test-path-utils: handle const parameter of basename and dirname
@ 2017-08-07 13:57 René Scharfe
  2017-08-07 21:15 ` Johannes Schindelin
  0 siblings, 1 reply; 2+ messages in thread
From: René Scharfe @ 2017-08-07 13:57 UTC (permalink / raw)
  To: Git List; +Cc: Johannes Schindelin, Git List

The parameter to basename(3) and dirname(3) traditionally had the type
"char *", but on OpenBSD it's been "const char *" for years.  That
causes (at least) Clang to throw an incompatible-pointer-types warning
for test-path-utils, where we try to pass around pointers to these
functions.

Avoid this warning (which is fatal in DEVELOPER mode) by ignoring the
promise of OpenBSD's implementations to keep input strings unmodified
and enclosing them in POSIX-compatible wrappers.

Signed-off-by: Rene Scharfe <l.s.r@web.de>
---
 t/helper/test-path-utils.c | 18 ++++++++++++++++--
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/t/helper/test-path-utils.c b/t/helper/test-path-utils.c
index 1ebe0f750c..2b3c5092a1 100644
--- a/t/helper/test-path-utils.c
+++ b/t/helper/test-path-utils.c
@@ -38,6 +38,20 @@ struct test_data {
 	const char *alternative; /* output: ... or this.      */
 };
 
+/*
+ * Compatibility wrappers for OpenBSD, whose basename(3) and dirname(3)
+ * have const parameters.
+ */
+static char *posix_basename(char *path)
+{
+	return basename(path);
+}
+
+static char *posix_dirname(char *path)
+{
+	return dirname(path);
+}
+
 static int test_function(struct test_data *data, char *(*func)(char *input),
 	const char *funcname)
 {
@@ -251,10 +265,10 @@ int cmd_main(int argc, const char **argv)
 	}
 
 	if (argc == 2 && !strcmp(argv[1], "basename"))
-		return test_function(basename_data, basename, argv[1]);
+		return test_function(basename_data, posix_basename, argv[1]);
 
 	if (argc == 2 && !strcmp(argv[1], "dirname"))
-		return test_function(dirname_data, dirname, argv[1]);
+		return test_function(dirname_data, posix_dirname, argv[1]);
 
 	fprintf(stderr, "%s: unknown function name: %s\n", argv[0],
 		argv[1] ? argv[1] : "(there was none)");
-- 
2.14.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] test-path-utils: handle const parameter of basename and dirname
  2017-08-07 13:57 [PATCH] test-path-utils: handle const parameter of basename and dirname René Scharfe
@ 2017-08-07 21:15 ` Johannes Schindelin
  0 siblings, 0 replies; 2+ messages in thread
From: Johannes Schindelin @ 2017-08-07 21:15 UTC (permalink / raw)
  To: René Scharfe; +Cc: Git List

[-- Attachment #1: Type: text/plain, Size: 663 bytes --]

Hi René,

On Mon, 7 Aug 2017, René Scharfe wrote:

> The parameter to basename(3) and dirname(3) traditionally had the type
> "char *", but on OpenBSD it's been "const char *" for years.  That
> causes (at least) Clang to throw an incompatible-pointer-types warning
> for test-path-utils, where we try to pass around pointers to these
> functions.
> 
> Avoid this warning (which is fatal in DEVELOPER mode) by ignoring the
> promise of OpenBSD's implementations to keep input strings unmodified
> and enclosing them in POSIX-compatible wrappers.
> 
> Signed-off-by: Rene Scharfe <l.s.r@web.de>
> ---

This patch is Fine By Me.

Thanks,
Dscho

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2017-08-07 21:15 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-08-07 13:57 [PATCH] test-path-utils: handle const parameter of basename and dirname René Scharfe
2017-08-07 21:15 ` Johannes Schindelin

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox