renameat: new module
[pspp] / lib / renameat.c
1 /* Rename a file relative to open directories.
2    Copyright (C) 2009 Free Software Foundation, Inc.
3
4    This program is free software: you can redistribute it and/or modify
5    it under the terms of the GNU General Public License as published by
6    the Free Software Foundation; either version 3 of the License, or
7    (at your option) any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13
14    You should have received a copy of the GNU General Public License
15    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
16
17 /* written by Eric Blake */
18
19 #include <config.h>
20
21 #include <stdio.h>
22
23 #include "openat-priv.h"
24
25 /* Rename FILE1, in the directory open on descriptor FD1, to FILE2, in
26    the directory open on descriptor FD2.  If possible, do it without
27    changing the working directory.  Otherwise, resort to using
28    save_cwd/fchdir, then rename/restore_cwd.  If either the save_cwd or
29    the restore_cwd fails, then give a diagnostic and exit nonzero.  */
30
31 int
32 renameat (int fd1, char const *file1, int fd2, char const *file2)
33 {
34   return at_func2 (fd1, file1, fd2, file2, rename);
35 }