/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2022, Danny Robson */ #include "./tmp.hpp" #include "./paths.hpp" #include "./posix/except.hpp" /////////////////////////////////////////////////////////////////////////////// std::filesystem::path cruft::fs::mktempfile () { return mktempfile (cruft::paths::temp ()); } //----------------------------------------------------------------------------- std::filesystem::path cruft::fs::mktempfile (std::filesystem::path const &dir) { auto pattern = (dir / PACKAGE_NAME "-XXXXXX").native (); if (!mkstemp (pattern.data ())) cruft::posix::error::throw_code (); return pattern; } /////////////////////////////////////////////////////////////////////////////// std::filesystem::path cruft::fs::mktmpdir (void) { // The pattern suffix we'll append to the temp directory. // // * We might as well append the package name for clarity // * The libc call REQUIRES the string end with "XXXXXX" char const SUFFIX[] = "/" PACKAGE_NAME "-XXXXXX"; auto const root = cruft::paths::temp (); std::string path; path.reserve (root.string ().size () + sizeof (SUFFIX)); path = root.string (); path += SUFFIX; if (!mkdtemp (path.data ())) cruft::posix::error::throw_code (); return std::filesystem::path (path); }