return true;
}
-size_t AggressiveNSECCache::dumpToFile(std::unique_ptr<FILE, int (*)(FILE*)>& fp, const struct timeval& now)
+size_t AggressiveNSECCache::dumpToFile(pdns::UniqueFilePtr& fp, const struct timeval& now)
{
size_t ret = 0;
static bool isSmallCoveringNSEC3(const DNSName& owner, const std::string& nextHash);
void prune(time_t now);
- size_t dumpToFile(std::unique_ptr<FILE, int (*)(FILE*)>& fp, const struct timeval& now);
+ size_t dumpToFile(pdns::UniqueFilePtr& fp, const struct timeval& now);
private:
struct ZoneEntry
if (newfd == -1) {
return 0;
}
- auto fp = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto fp = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!fp) {
close(newfd);
return 0;
return;
}
setNonBlocking(traceFd);
- auto filep = std::unique_ptr<FILE, decltype(&fclose)>(fdopen(traceFd, "a"), &fclose);
+ auto filep = pdns::UniqueFilePtr(fdopen(traceFd, "a"));
if (!filep) {
int err = errno;
SLOG(g_log << Logger::Error << "Could not write to trace file: " << stringerror(err) << endl,
if (newfd == -1) {
return 0;
}
- auto fp = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto fp = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!fp) {
return 0;
}
return {1, "No RPZ zone named " + zoneName + "\n"};
}
- auto fp = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(fdw, "w"), fclose);
+ auto fp = pdns::UniqueFilePtr(fdopen(fdw, "w"));
if (!fp) {
int err = errno;
return {1, "converting file descriptor: " + stringerror(err) + "\n"};
if (fdupped == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, decltype(&fclose)>(fdopen(fdupped, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(fdupped, "w"));
if (!filePtr) {
close(fdupped);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) { // dup probably failed
close(newfd);
return 0;
else {
SLOG(g_log << Logger::Warning << "Reading zone forwarding information from '" << filename << "'" << endl,
log->info(Logr::Notice, "Reading zone forwarding information", "file", Logging::Loggable(filename)));
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fopen(filename.c_str(), "r"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fopen(filename.c_str(), "r"));
if (!filePtr) {
int err = errno;
throw PDNSException("Error opening forward-zones-file '" + filename + "': " + stringerror(err));
else {
SLOG(g_log << Logger::Warning << "Reading NOTIFY-allowed zones from '" << filename << "'" << endl,
log->info(Logr::Notice, "Reading NOTIFY-allowed zones from file", "file", Logging::Loggable(filename)));
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fopen(filename.c_str(), "r"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fopen(filename.c_str(), "r"));
if (!filePtr) {
throw PDNSException("Error opening allow-notify-for-file '" + filename + "': " + stringerror());
}
return false;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(fileDesc, "w+"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(fileDesc, "w+"));
if (!filePtr) {
int err = errno;
close(fileDesc);
void pdns::settings::rec::oldStyleForwardsFileToBridgeStruct(const std::string& file, ::rust::Vec<ForwardZone>& vec)
{
- auto filePtr = std::unique_ptr<FILE, decltype(&fclose)>(fopen(file.c_str(), "r"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fopen(file.c_str(), "r"));
if (!filePtr) {
throw PDNSException("Error opening forward-zones-file '" + file + "': " + stringerror());
}
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
if (newfd == -1) {
return 0;
}
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(fdopen(newfd, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(newfd, "w"));
if (!filePtr) {
close(newfd);
return 0;
BOOST_CHECK_EQUAL(cache->getEntriesCount(), 3U);
- auto filePtr = std::unique_ptr<FILE, int (*)(FILE*)>(tmpfile(), fclose);
+ auto filePtr = pdns::UniqueFilePtr(tmpfile());
if (!filePtr) {
BOOST_FAIL("Temporary file could not be opened");
}
cache.add(genNegCacheEntry(DNSName("www1.powerdns.com"), DNSName("powerdns.com"), now));
cache.add(genNegCacheEntry(DNSName("www2.powerdns.com"), DNSName("powerdns.com"), now));
- auto fp = std::unique_ptr<FILE, int (*)(FILE*)>(tmpfile(), fclose);
- if (!fp)
+ auto fp = pdns::UniqueFilePtr(tmpfile());
+ if (!fp) {
BOOST_FAIL("Temporary file could not be opened");
+ }
cache.doDump(fileno(fp.get()), 0, now.tv_sec);
std::array<char, 20> temp{"/tmp/rpzXXXXXXXXXX"};
int fileDesc = mkstemp(temp.data());
BOOST_REQUIRE(fileDesc > 0);
- auto filePtr = std::unique_ptr<FILE, decltype(&fclose)>(fdopen(fileDesc, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(fileDesc, "w"));
BOOST_REQUIRE(filePtr);
size_t written = fwrite(lines.data(), 1, lines.length(), filePtr.get());
BOOST_REQUIRE(written == lines.length());
std::string temp("/tmp/test-settingsXXXXXXXXXX");
int fileDesc = mkstemp(temp.data());
BOOST_REQUIRE(fileDesc > 0);
- auto filePtr = std::unique_ptr<FILE, decltype(&fclose)>(fdopen(fileDesc, "w"), fclose);
+ auto filePtr = pdns::UniqueFilePtr(fdopen(fileDesc, "w"));
BOOST_REQUIRE(filePtr != nullptr);
size_t written = fwrite(fileContent.data(), 1, fileContent.length(), filePtr.get());
BOOST_REQUIRE(written == fileContent.length());