Serenity Operating System
at master 58 lines 1.3 kB view raw
1/* 2 * Copyright (c) 2020-2021, the SerenityOS developers. 3 * 4 * SPDX-License-Identifier: BSD-2-Clause 5 */ 6 7#include "TempFile.h" 8#include <AK/Random.h> 9#include <LibCore/DeprecatedFile.h> 10#include <fcntl.h> 11#include <stdlib.h> 12#include <sys/stat.h> 13 14namespace Core { 15 16NonnullOwnPtr<TempFile> TempFile::create(Type type) 17{ 18 return adopt_own(*new TempFile(type)); 19} 20 21DeprecatedString TempFile::create_temp(Type type) 22{ 23 char name_template[] = "/tmp/tmp.XXXXXX"; 24 switch (type) { 25 case Type::File: { 26 auto fd = mkstemp(name_template); 27 VERIFY(fd >= 0); 28 close(fd); 29 break; 30 } 31 case Type::Directory: { 32 auto fd = mkdtemp(name_template); 33 VERIFY(fd != nullptr); 34 break; 35 } 36 } 37 return DeprecatedString { name_template }; 38} 39 40TempFile::TempFile(Type type) 41 : m_type(type) 42 , m_path(create_temp(type)) 43{ 44} 45 46TempFile::~TempFile() 47{ 48 DeprecatedFile::RecursionMode recursion_allowed { DeprecatedFile::RecursionMode::Disallowed }; 49 if (m_type == Type::Directory) 50 recursion_allowed = DeprecatedFile::RecursionMode::Allowed; 51 52 auto rc = DeprecatedFile::remove(m_path, recursion_allowed); 53 if (rc.is_error()) { 54 warnln("File::remove failed: {}", rc.error().string_literal()); 55 } 56} 57 58}