view lib/backup-rename.c @ 39948:c01fb99adfe2

backupfile: new dir_fd args New module opendirat with code taken from fts. Use this module to let backupfile use a directory file descriptor. * NEWS: Document the incompatible change. * lib/backup-find.c (find_backup_file_name): * lib/backup-rename.c (backup_file_rename): New arg DIR_FD. * lib/backupfile.c: Include stdint.h, for SIZE_MAX. (SIZE_MAX): Remove. Include opendirat.h rather than dirent--.h. (check_extension): New args DIR_FD and BASE_MAX. All callers changed. (numbered_backup): New args DIR_FD and PNEW_FD. All callers changed. (backupfile_internal): New arg DIR_FD. All callers changed. * lib/fts.c: Include opendirat.h. (opendirat): Move to opendirat.c. * lib/opendirat.c, lib/opendirat.h, modules/opendirat: New files. * modules/backupfile (Depends-on): Remove dirfd, opendir. Add opendirat. * modules/fts (Depends-on): Remove fdopendir, openat-safer. Add opendirat.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 23 Oct 2018 19:10:21 -0700
parents 10eb9086bea0
children b06060465f09
line wrap: on
line source

/* Rename a file to a backup name, Emacs style.

   Copyright 2017-2018 Free Software Foundation, Inc.

   This program 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 3 of the License, or
   (at your option) any later version.

   This program 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 this program.  If not, see <https://www.gnu.org/licenses/>.  */

#include <config.h>

#include "backup-internal.h"

/* Relative to DIR_FD, rename the existing file FILE to a backup name,
   allocated with malloc, and return the backup name.  On failure
   return a null pointer, setting errno.  Do not call this function if
   backup_type == no_backups.  */

char *
backup_file_rename (int dir_fd, char const *file, enum backup_type backup_type)
{
  return backupfile_internal (dir_fd, file, backup_type, true);
}