This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: libgen: basename and dirname [PATCH]


On Apr 8, 2005 10:51 AM, Jeff Johnston <jjohnstn@redhat.com> wrote:
> I realize it is a pain, but it could be a whole lot worse if we forced everyone
> to sign a permission form like the FSF does.
> 
> Regards,
> 
> -- Jeff J.

It's not a problem. I understand the purpose of copyrights and
licenses. Here's the revised patch. I stole libgen.h from
winsup/cygwin/include/libgen.h..

Cheers,
Shaun

2005-04-08  Shaun Jackman  <sjackman@gmail.com>

	* libc/unix/Makefile.am: Add basename.c and dirname.c to GENERAL_SOURCES.
	* libc/include/libgen.h: New file.
	* libc/unix/basename.c: Ditto.
	* libc/unix/dirname.c: Ditto.

diff -u -r1.4 Makefile.am
--- libc/unix/Makefile.am	26 Aug 2002 18:56:09 -0000	1.4
+++ libc/unix/Makefile.am	8 Apr 2005 18:25:57 -0000
@@ -5,6 +5,8 @@
 INCLUDES = $(NEWLIB_CFLAGS) $(CROSS_CFLAGS) $(TARGET_CFLAGS)
 
 GENERAL_SOURCES = \
+	basename.c	\
+	dirname.c	\
 	getcwd.c 	\
 	pread.c 	\
 	pwrite.c 	\
diff -u /dev/null libc/include/libgen.h
--- /dev/null	2005-04-04 21:44:30.000000000 -0700
+++ libc/include/libgen.h	2005-04-08 10:12:06.000000000 -0700
@@ -0,0 +1,23 @@
+/* libgen.h
+
+   Copyright 2005 Red Hat, Inc.
+
+This file is part of Cygwin.
+
+This software is a copyrighted work licensed under the terms of the
+Cygwin license.  Please consult the file "CYGWIN_LICENSE" for
+details. */
+
+#ifndef _LIBGEN_H
+#define _LIBGEN_H
+
+#include <sys/cdefs.h>
+
+__BEGIN_DECLS
+
+extern char *basename (char *path);
+extern char *dirname (char *path);
+
+__END_DECLS
+
+#endif /* _LIBGEN_H */
diff -u /dev/null libc/unix/basename.c
--- /dev/null	2005-04-04 21:44:30.000000000 -0700
+++ libc/unix/basename.c	2005-04-08 11:28:08.000000000 -0700
@@ -0,0 +1,22 @@
+/* Copyright 2005 Shaun Jackman
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <string.h>
+
+char* basename(char *path)
+{
+	char *p;
+	if( path == NULL || *path == '\0' )
+		return ".";
+	p = path + strlen(path) - 1;
+	while( *p == '/' ) {
+		if( p == path )
+			return path;
+		*p-- = '\0';
+	}
+	while( p >= path && *p != '/' )
+		p--;
+	return p + 1;
+}
diff -u /dev/null libc/unix/dirname.c
--- /dev/null	2005-04-04 21:44:30.000000000 -0700
+++ libc/unix/dirname.c	2005-04-08 11:28:11.000000000 -0700
@@ -0,0 +1,25 @@
+/* Copyright 2005 Shaun Jackman
+ * Permission to use, copy, modify, and distribute this software
+ * is freely granted, provided that this notice is preserved.
+ */
+
+#include <string.h>
+
+char* dirname(char *path)
+{
+	char *p;
+	if( path == NULL || *path == '\0' )
+		return ".";
+	p = path + strlen(path) - 1;
+	while( *p == '/' ) {
+		if( p == path )
+			return path;
+		*p-- = '\0';
+	}
+	while( p >= path && *p != '/' )
+		p--;
+	return
+		p < path ? "." :
+		p == path ? "/" :
+		(*p = '\0', path);
+}


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]