summaryrefslogtreecommitdiff
path: root/newlib/libc/stdio/remove.c
diff options
context:
space:
mode:
Diffstat (limited to 'newlib/libc/stdio/remove.c')
-rw-r--r--newlib/libc/stdio/remove.c69
1 files changed, 69 insertions, 0 deletions
diff --git a/newlib/libc/stdio/remove.c b/newlib/libc/stdio/remove.c
new file mode 100644
index 00000000000..074dd9ac8a7
--- /dev/null
+++ b/newlib/libc/stdio/remove.c
@@ -0,0 +1,69 @@
+/*
+FUNCTION
+<<remove>>---delete a file's name
+
+INDEX
+ remove
+
+ANSI_SYNOPSIS
+ #include <stdio.h>
+ int remove(char *<[filename]>);
+
+ int _remove_r(void *<[reent]>, char *<[filename]>);
+
+TRAD_SYNOPSIS
+ #include <stdio.h>
+ int remove(<[filename]>)
+ char *<[filename]>;
+
+ int _remove_r(<[reent]>, <[filename]>)
+ char *<[reent]>;
+ char *<[filename]>;
+
+DESCRIPTION
+Use <<remove>> to dissolve the association between a particular
+filename (the string at <[filename]>) and the file it represents.
+After calling <<remove>> with a particular filename, you will no
+longer be able to open the file by that name.
+
+In this implementation, you may use <<remove>> on an open file without
+error; existing file descriptors for the file will continue to access
+the file's data until the program using them closes the file.
+
+The alternate function <<_remove_r>> is a reentrant version. The
+extra argument <[reent]> is a pointer to a reentrancy structure.
+
+RETURNS
+<<remove>> returns <<0>> if it succeeds, <<-1>> if it fails.
+
+PORTABILITY
+ANSI C requires <<remove>>, but only specifies that the result on
+failure be nonzero. The behavior of <<remove>> when you call it on an
+open file may vary among implementations.
+
+Supporting OS subroutine required: <<unlink>>.
+*/
+
+#include <stdio.h>
+
+int
+_remove_r (ptr, filename)
+ struct _reent *ptr;
+ _CONST char *filename;
+{
+ if (_unlink_r (ptr, filename) == -1)
+ return -1;
+
+ return 0;
+}
+
+#ifndef _REENT_ONLY
+
+int
+remove (filename)
+ _CONST char *filename;
+{
+ return _remove_r (_REENT, filename);
+}
+
+#endif