/* * 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 #include #include /////////////////////////////////////////////////////////////////////////////// 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 (); auto const fd = mkstemp (pattern.data ()); if (fd < 0) cruft::posix::error::throw_code (); cruft::posix::error::try_call(::close, fd); 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); }