source: vendor/bash/3.1-p17/lib/sh/rename.c

Last change on this file was 3231, checked in by bird, 18 years ago

eol style.

  • Property svn:eol-style set to native
File size: 1.6 KB
Line 
1/*
2 * rename - rename a file
3 */
4
5/* Copyright (C) 1999 Free Software Foundation, Inc.
6
7 This file is part of GNU Bash, the Bourne Again SHell.
8
9 Bash is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
12 any later version.
13
14 Bash is distributed in the hope that it will be useful, but WITHOUT
15 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
17 License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with Bash; see the file COPYING. If not, write to the Free
21 Software Foundation, 59 Temple Place, Suite 330, Boston, MA 02111 USA. */
22
23#include <config.h>
24
25#if !defined (HAVE_RENAME)
26
27#include <bashtypes.h>
28#include <posixstat.h>
29
30#if defined (HAVE_UNISTD_H)
31# include <unistd.h>
32#endif
33#include <errno.h>
34
35#include <stdc.h>
36
37#ifndef errno
38extern int errno;
39#endif
40
41int
42rename (from, to)
43 const char *from, *to;
44{
45 struct stat fb, tb;
46
47 if (stat (from, &fb) < 0)
48 return -1;
49
50 if (stat (to, &tb) < 0)
51 {
52 if (errno != ENOENT)
53 return -1;
54 }
55 else
56 {
57 if (fb.st_dev == tb.st_dev && fb.st_ino == tb.st_ino)
58 return 0; /* same file */
59 if (unlink (to) < 0 && errno != ENOENT)
60 return -1;
61 }
62
63 if (link (from, to) < 0)
64 return (-1);
65
66 if (unlink (from) < 0 && errno != ENOENT)
67 {
68 int e = errno;
69 unlink (to);
70 errno = e;
71 return (-1);
72 }
73
74 return (0);
75}
76#endif /* !HAVE_RENAME */
Note: See TracBrowser for help on using the repository browser.