1/* Unlinking class
2
3   Copyright (C) 2016-2023 Free Software Foundation, Inc.
4
5   This file is part of GDB.
6
7   This program is free software; you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation; either version 3 of the License, or
10   (at your option) any later version.
11
12   This program is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20#ifndef COMMON_GDB_UNLINKER_H
21#define COMMON_GDB_UNLINKER_H
22
23namespace gdb
24{
25
26/* An object of this class holds a filename and, when the object goes
27   of scope, the file is removed using unlink.
28
29   A user of this class can request that the file be preserved using
30   the "keep" method.  */
31class unlinker
32{
33 public:
34
35  unlinker (const char *filename) ATTRIBUTE_NONNULL (2)
36    : m_filename (filename)
37  {
38    gdb_assert (filename != NULL);
39  }
40
41  ~unlinker ()
42  {
43    if (m_filename != NULL)
44      unlink (m_filename);
45  }
46
47  /* Keep the file, rather than unlink it.  */
48  void keep ()
49  {
50    m_filename = NULL;
51  }
52
53 private:
54
55  const char *m_filename;
56};
57
58}
59
60#endif /* COMMON_GDB_UNLINKER_H */
61