This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC 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]

libiberty addition (for binutils): unlink_if_ordinary


Built and tested in binutils mainline (where it is needed) on
i686-pc-linux-gnu.

Jan

include/
2004-12-17  Jan Beulich  <jbeulich@novell.com>

	* libiberty.h: Declare unlink_if_ordinary.

libiberty/
2004-12-17  Jan Beulich  <jbeulich@novell.com>

	* Makefile.in (CFILES): Add unlink-if-ordinary.c
	(REQUIRED_OFILES): Add unlink-if-ordinary.o.
	Add dependencies and rule for unlink-if-ordinary.o.
	* unlink-if-ordinary.c: New.

---
/home/jbeulich/src/gcc/mainline/2004-12-13.08.53/include/libiberty.h	2004-10-13
09:38:22.000000000 +0200
+++ 2004-12-13.08.53/include/libiberty.h	2004-12-17
10:10:32.905862464 +0100
@@ -163,6 +163,10 @@ extern char *choose_temp_base PARAMS ((v
 
 extern char *make_temp_file PARAMS ((const char *)) ATTRIBUTE_MALLOC;
 
+/* Remove a link to a file unless it is special. */
+
+extern int unlink_if_ordinary PARAMS((const char *));
+
 /* Allocate memory filled with spaces.  Allocates using malloc.  */
 
 extern const char *spaces PARAMS ((int count));
---
/home/jbeulich/src/gcc/mainline/2004-12-13.08.53/libiberty/Makefile.in	2004-11-25
13:32:55.000000000 +0100
+++ 2004-12-13.08.53/libiberty/Makefile.in	2004-12-17
10:10:32.910861704 +0100
@@ -151,6 +151,7 @@ CFILES = alloca.c argv.c asprintf.c atex
 	 strerror.c strncasecmp.c strncmp.c strrchr.c
strsignal.c	\
 	 strstr.c strtod.c strtol.c
strtoul.c				\
 	ternary.c
tmpnam.c						\
+	unlink-if-ordinary.c						\
 	vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c
vsprintf.c	\

	waitpid.c							\
 	xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c
@@ -171,6 +172,7 @@ REQUIRED_OFILES = ./regex.o ./cplus-dem.
 	./safe-ctype.o ./sort.o ./spaces.o ./splay-tree.o
./strerror.o	\
 	
./strsignal.o							\

	./ternary.o							\
+	./unlink-if-ordinary.o						\
 	./xatexit.o ./xexit.o ./xmalloc.o ./xmemdup.o
./xstrdup.o	\
 	 ./xstrerror.o
 
@@ -973,6 +975,13 @@ $(CONFIGURED_OFILES): stamp-picdir
 	else true; fi
 	$(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
 
+./unlink-if-ordinary.o: $(srcdir)/unlink-if-ordinary.c config.h
$(INCDIR)/ansidecl.h \
+	$(INCDIR)/libiberty.h
+	if [ x"$(PICFLAG)" != x ]; then \
+	  $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o
pic/$@; \
+	else true; fi
+	$(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION)
+
 ./vasprintf.o: $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
 	$(INCDIR)/libiberty.h
 	if [ x"$(PICFLAG)" != x ]; then \
---
/home/jbeulich/src/gcc/mainline/2004-12-13.08.53/libiberty/unlink-if-ordinary.c	1970-01-01
01:00:00.000000000 +0100
+++ 2004-12-13.08.53/libiberty/unlink-if-ordinary.c	2004-12-17
10:14:19.870358616 +0100
@@ -0,0 +1,71 @@
+/* unlink-if-ordinary.c - remove link to a file unless it is special
+   Copyright (C) 2004 Free Software Foundation, Inc.
+
+This file is part of the libiberty library.  This library is free
+software; you can redistribute it and/or modify it under the
+terms of the GNU General Public License as published by the
+Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU CC; see the file COPYING.  If not, write to
+the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.
+
+As a special exception, if you link this library with files
+compiled with a GNU compiler to produce an executable, this does not
cause
+the resulting executable to be covered by the GNU General Public
License.
+This exception does not however invalidate any other reasons why
+the executable file might be covered by the GNU General Public
License. */
+
+/*
+
+@deftypefn Supplemental int unlink_if_ordinary (const char*)
+
+Unlinks the named file, unless it is special (e.g. a device file).
+Returns 0 when the file was unlinked, a negative value (and errno set)
when
+there was an error deleting the file, and a positive value if no
attempt
+was made to unlink the file because it is special.
+
+@end deftypefn
+
+*/
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+#if HAVE_SYS_STAT_H
+#include <sys/stat.h>
+#endif
+
+#include "libiberty.h"
+
+#ifndef S_ISLNK
+#ifdef S_IFLNK
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#else
+#define S_ISLNK(m) 0
+#define lstat stat
+#endif
+#endif
+
+int
+unlink_if_ordinary (name)
+  const char *name;
+{
+  struct stat st;
+
+  if (lstat (name, &st) == 0
+      && (S_ISREG (st.st_mode) || S_ISLNK (st.st_mode)))
+    return unlink (name);
+
+  return 1;
+}

Attachment: libiberty-mainline-unlink-ordinary.patch
Description: Binary data


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