]> git.ipfire.org Git - thirdparty/glibc.git/blame - sysdeps/posix/remove.c
Prefer https to http for gnu.org and fsf.org URLs
[thirdparty/glibc.git] / sysdeps / posix / remove.c
CommitLineData
28f540f4 1/* ANSI C `remove' function to delete a file or directory. POSIX.1 version.
04277e02 2 Copyright (C) 1995-2019 Free Software Foundation, Inc.
478b92f0 3 This file is part of the GNU C Library.
28f540f4 4
478b92f0 5 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
28f540f4 9
478b92f0
UD
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 13 Lesser General Public License for more details.
28f540f4 14
41bdb6e2 15 You should have received a copy of the GNU Lesser General Public
59ba27a6 16 License along with the GNU C Library; if not, see
5a82c748 17 <https://www.gnu.org/licenses/>. */
28f540f4
RM
18
19#include <errno.h>
20#include <stdio.h>
21#include <unistd.h>
22
cb652f30
UD
23
24#ifndef IS_NO_DIRECTORY_ERROR
25# define IS_NO_DIRECTORY_ERROR errno != EPERM
26#endif
27
28
28f540f4 29int
bd2260a2 30remove (const char *file)
28f540f4 31{
2c008571
UD
32 /* First try to unlink since this is more frequently the necessary action. */
33 if (__unlink (file) != 0
34 /* If it is indeed a directory... */
cb652f30 35 && (IS_NO_DIRECTORY_ERROR
2c008571
UD
36 /* ...try to remove it. */
37 || __rmdir (file) != 0))
38 /* Cannot remove the object for whatever reason. */
39 return -1;
28f540f4 40
2c008571 41 return 0;
28f540f4 42}
b9b91868 43libc_hidden_def (remove)