#include "config.h"
+#include <cstdio>
#include <cstring>
#include <sys/types.h>
#include <sys/stat.h>
int
- SDir::rmdir(const string& name) const
+ SDir::unlink(const string& name, int flags) const
{
assert(name.find('/') == string::npos);
assert(name != "..");
- return ::unlinkat(dirfd, name.c_str(), AT_REMOVEDIR);
- }
-
-
- int
- SDir::unlink(const string& name) const
- {
- assert(name.find('/') == string::npos);
- assert(name != "..");
-
- return ::unlinkat(dirfd, name.c_str(), 0);
+ return ::unlinkat(dirfd, name.c_str(), flags);
}
int
- SDir::rename(const string& oldname, const string& newname) const
+ SDir::rename(const string& oldname, const string& newname, int flags) const
{
assert(oldname.find('/') == string::npos);
assert(oldname != "..");
assert(newname.find('/') == string::npos);
assert(newname != "..");
- return ::renameat(dirfd, oldname.c_str(), dirfd, newname.c_str());
+ return ::renameat2(dirfd, oldname.c_str(), dirfd, newname.c_str(), flags);
}
int open(const string& name, int flags, mode_t mode) const;
ssize_t readlink(const string& name, string& buf) const;
int mkdir(const string& name, mode_t mode) const;
- int rmdir(const string& name) const;
- int unlink(const string& name) const;
+ int unlink(const string& name, int flags = 0) const;
+ int rmdir(const string& name) const
+ { return unlink(name, AT_REMOVEDIR); }
int chmod(const string& name, mode_t mode, int flags) const;
int chown(const string& name, uid_t owner, gid_t group, int flags) const;
- int rename(const string& oldname, const string& newname) const;
+ int rename(const string& oldname, const string& newname, int flags = 0) const;
+ int exchange(const string& oldname, const string& newname) const
+ { return rename(oldname, newname, RENAME_EXCHANGE); }
int fsync() const;
// Query size and free.