From def5160b614a59a0aa96fe2252e3daa00146e061 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 3 Jan 2013 12:59:23 +0100 Subject: Clear any immutable bits in the Nix store Doing this once makes subsequent operations like garbage collecting more efficient since we don't have to call makeMutable() first. --- src/libutil/Makefile.am | 4 ++-- src/libutil/immutable.cc | 49 ------------------------------------------------ src/libutil/immutable.hh | 10 ---------- src/libutil/util.cc | 3 --- 4 files changed, 2 insertions(+), 64 deletions(-) delete mode 100644 src/libutil/immutable.cc delete mode 100644 src/libutil/immutable.hh (limited to 'src/libutil') diff --git a/src/libutil/Makefile.am b/src/libutil/Makefile.am index 4a3523f3be2a..fe896eec5012 100644 --- a/src/libutil/Makefile.am +++ b/src/libutil/Makefile.am @@ -1,12 +1,12 @@ pkglib_LTLIBRARIES = libutil.la libutil_la_SOURCES = util.cc hash.cc serialise.cc \ - archive.cc xml-writer.cc immutable.cc + archive.cc xml-writer.cc libutil_la_LIBADD = ../boost/format/libformat.la pkginclude_HEADERS = util.hh hash.hh serialise.hh \ - archive.hh xml-writer.hh types.hh immutable.hh + archive.hh xml-writer.hh types.hh if !HAVE_OPENSSL libutil_la_SOURCES += \ diff --git a/src/libutil/immutable.cc b/src/libutil/immutable.cc deleted file mode 100644 index 766af4939331..000000000000 --- a/src/libutil/immutable.cc +++ /dev/null @@ -1,49 +0,0 @@ -#include "config.h" - -#include "immutable.hh" -#include "util.hh" - -#include -#include -#include - -#if HAVE_LINUX_FS_H -#include -#include -#include -#endif - -namespace nix { - - -void makeMutable(const Path & path) -{ -#if defined(FS_IOC_SETFLAGS) && defined(FS_IOC_GETFLAGS) && defined(FS_IMMUTABLE_FL) - - /* Don't even try if we're not root. One day we should support - the CAP_LINUX_IMMUTABLE capability. */ - if (getuid() != 0) return; - - /* The O_NOFOLLOW is important to prevent us from changing the - mutable bit on the target of a symlink (which would be a - security hole). */ - AutoCloseFD fd = open(path.c_str(), O_RDONLY | O_NOFOLLOW); - if (fd == -1) { - if (errno == ELOOP) return; // it's a symlink - throw SysError(format("opening file `%1%'") % path); - } - - unsigned int flags = 0, old; - - /* Silently ignore errors getting/setting the immutable flag so - that we work correctly on filesystems that don't support it. */ - if (ioctl(fd, FS_IOC_GETFLAGS, &flags)) return; - old = flags; - flags &= ~FS_IMMUTABLE_FL; - if (old == flags) return; - if (ioctl(fd, FS_IOC_SETFLAGS, &flags)) return; -#endif -} - - -} diff --git a/src/libutil/immutable.hh b/src/libutil/immutable.hh deleted file mode 100644 index 8e98b76a41c5..000000000000 --- a/src/libutil/immutable.hh +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include - -namespace nix { - -/* Make the given path mutable. */ -void makeMutable(const Path & path); - -} diff --git a/src/libutil/util.cc b/src/libutil/util.cc index 1308eac31293..7874329c763b 100644 --- a/src/libutil/util.cc +++ b/src/libutil/util.cc @@ -13,7 +13,6 @@ #include #include "util.hh" -#include "immutable.hh" extern char * * environ; @@ -305,8 +304,6 @@ static void _deletePath(const Path & path, unsigned long long & bytesFreed) struct stat st = lstat(path); - if (S_ISDIR(st.st_mode) || S_ISREG(st.st_mode)) makeMutable(path); - if (!S_ISDIR(st.st_mode) && st.st_nlink == 1) bytesFreed += st.st_blocks * 512; -- cgit 1.4.1