Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 18 Sep 2020 16:05:29 +0000 (UTC)
From:      Christian Weisgerber <naddy@FreeBSD.org>
To:        ports-committers@freebsd.org, svn-ports-all@freebsd.org, svn-ports-head@freebsd.org
Subject:   svn commit: r548895 - in head/devel/got: . files/openbsd-compat
Message-ID:  <202009181605.08IG5TgH004651@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: naddy
Date: Fri Sep 18 16:05:28 2020
New Revision: 548895
URL: https://svnweb.freebsd.org/changeset/ports/548895

Log:
  Add compatibiliy functions for basename(3) and dirname(3) since Got
  assumes that those don't modify the pathname buffer.

Added:
  head/devel/got/files/openbsd-compat/basename.c   (contents, props changed)
  head/devel/got/files/openbsd-compat/dirname.c   (contents, props changed)
  head/devel/got/files/openbsd-compat/libgen.h   (contents, props changed)
Modified:
  head/devel/got/Makefile
  head/devel/got/files/openbsd-compat/Makefile

Modified: head/devel/got/Makefile
==============================================================================
--- head/devel/got/Makefile	Fri Sep 18 15:56:38 2020	(r548894)
+++ head/devel/got/Makefile	Fri Sep 18 16:05:28 2020	(r548895)
@@ -2,6 +2,7 @@
 
 PORTNAME=	got
 PORTVERSION=	0.39
+PORTREVISION=	1
 CATEGORIES=	devel
 MASTER_SITES=	https://gameoftrees.org/releases/
 

Modified: head/devel/got/files/openbsd-compat/Makefile
==============================================================================
--- head/devel/got/files/openbsd-compat/Makefile	Fri Sep 18 15:56:38 2020	(r548894)
+++ head/devel/got/files/openbsd-compat/Makefile	Fri Sep 18 16:05:28 2020	(r548895)
@@ -1,7 +1,9 @@
 LIB=	openbsd-compat
 INTERNALLIB=
 
-SRCS=	freezero.c \
+SRCS=	basename.c \
+	dirname.c \
+	freezero.c \
 	getdtablecount.c \
 	imsg.c \
 	imsg-buffer.c \

Added: head/devel/got/files/openbsd-compat/basename.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/got/files/openbsd-compat/basename.c	Fri Sep 18 16:05:28 2020	(r548895)
@@ -0,0 +1,63 @@
+/*	$OpenBSD: basename.c,v 1.16 2019/01/25 00:19:25 millert Exp $	*/
+
+/*
+ * Copyright (c) 1997, 2004 Todd C. Miller <millert@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <errno.h>
+#include <libgen.h>
+#include <limits.h>
+#include <string.h>
+
+char *
+basename(const char *path)
+{
+	static char bname[PATH_MAX];
+	size_t len;
+	const char *endp, *startp;
+
+	/* Empty or NULL string gets treated as "." */
+	if (path == NULL || *path == '\0') {
+		bname[0] = '.';
+		bname[1] = '\0';
+		return (bname);
+	}
+
+	/* Strip any trailing slashes */
+	endp = path + strlen(path) - 1;
+	while (endp > path && *endp == '/')
+		endp--;
+
+	/* All slashes becomes "/" */
+	if (endp == path && *endp == '/') {
+		bname[0] = '/';
+		bname[1] = '\0';
+		return (bname);
+	}
+
+	/* Find the start of the base */
+	startp = endp;
+	while (startp > path && *(startp - 1) != '/')
+		startp--;
+
+	len = endp - startp + 1;
+	if (len >= sizeof(bname)) {
+		errno = ENAMETOOLONG;
+		return (NULL);
+	}
+	memcpy(bname, startp, len);
+	bname[len] = '\0';
+	return (bname);
+}

Added: head/devel/got/files/openbsd-compat/dirname.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/got/files/openbsd-compat/dirname.c	Fri Sep 18 16:05:28 2020	(r548895)
@@ -0,0 +1,69 @@
+/*	$OpenBSD: dirname.c,v 1.16 2019/01/25 00:19:25 millert Exp $	*/
+
+/*
+ * Copyright (c) 1997, 2004 Todd C. Miller <millert@openbsd.org>
+ *
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include <errno.h>
+#include <libgen.h>
+#include <limits.h>
+#include <string.h>
+
+/* A slightly modified copy of this file exists in libexec/ld.so */
+
+char *
+dirname(const char *path)
+{
+	static char dname[PATH_MAX];
+	size_t len;
+	const char *endp;
+
+	/* Empty or NULL string gets treated as "." */
+	if (path == NULL || *path == '\0') {
+		dname[0] = '.';
+		dname[1] = '\0';
+		return (dname);
+	}
+
+	/* Strip any trailing slashes */
+	endp = path + strlen(path) - 1;
+	while (endp > path && *endp == '/')
+		endp--;
+
+	/* Find the start of the dir */
+	while (endp > path && *endp != '/')
+		endp--;
+
+	/* Either the dir is "/" or there are no slashes */
+	if (endp == path) {
+		dname[0] = *endp == '/' ? '/' : '.';
+		dname[1] = '\0';
+		return (dname);
+	} else {
+		/* Move forward past the separating slashes */
+		do {
+			endp--;
+		} while (endp > path && *endp == '/');
+	}
+
+	len = endp - path + 1;
+	if (len >= sizeof(dname)) {
+		errno = ENAMETOOLONG;
+		return (NULL);
+	}
+	memcpy(dname, path, len);
+	dname[len] = '\0';
+	return (dname);
+}

Added: head/devel/got/files/openbsd-compat/libgen.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/devel/got/files/openbsd-compat/libgen.h	Fri Sep 18 16:05:28 2020	(r548895)
@@ -0,0 +1,10 @@
+#ifndef _OPENBSD_COMPAT_LIBGEN_H_
+#define _OPENBSD_COMPAT_LIBGEN_H_
+
+#define basename(path)	basename_const(path)
+#define dirname(path)	dirname_const(path)
+
+char	*basename(const char *);
+char	*dirname(const char *);
+
+#endif



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202009181605.08IG5TgH004651>