diff options
author | Tom Tromey <tom@tromey.com> | 2018-09-17 10:48:20 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-10-27 11:58:41 -0600 |
commit | e418a61a67a3476826259163383e5deb661042cc (patch) | |
tree | 44214b56d20367f0979c8c00e469edcb290171a6 /gdb/unittests | |
parent | 29be4d9dee1263b36e33421dd8ea69b9b7308391 (diff) | |
download | gdb-e418a61a67a3476826259163383e5deb661042cc.zip gdb-e418a61a67a3476826259163383e5deb661042cc.tar.gz gdb-e418a61a67a3476826259163383e5deb661042cc.tar.bz2 |
Move mkdir_recursive to common/filestuff.c
This moves mkdir_recursive from dwarf-index-cache.c to
common/filestuff.c, and also changes it to return a boolean that says
whether or not it worked.
gdb/ChangeLog
2018-10-27 Tom Tromey <tom@tromey.com>
* unittests/mkdir-recursive-selftests.c: New file.
* Makefile.in (SUBDIR_UNITTESTS_SRCS): Add
unittests/mkdir-recursive-selftests.c.
* dwarf-index-cache.c (mkdir_recursive): Move to
common/filestuff.c.
(index_cache::store): Check return value of mkdir_recursive.
(create_dir_and_check, test_mkdir_recursive): Move to new file.
(_initialize_index_cache): Don't register test.
* common/filestuff.h (mkdir_recursive): Declare.
* common/filestuff.c (mkdir_recursive): Move from
dwarf-index-cache.c. Return bool.
Diffstat (limited to 'gdb/unittests')
-rw-r--r-- | gdb/unittests/mkdir-recursive-selftests.c | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/gdb/unittests/mkdir-recursive-selftests.c b/gdb/unittests/mkdir-recursive-selftests.c new file mode 100644 index 0000000..d501f8e --- /dev/null +++ b/gdb/unittests/mkdir-recursive-selftests.c @@ -0,0 +1,89 @@ +/* Self tests for scoped_fd for GDB, the GNU debugger. + + Copyright (C) 2018 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +#include "defs.h" + +#include "common/filestuff.h" +#include "selftest.h" + +namespace selftests { +namespace mkdir_recursive { + +/* Try to create DIR using mkdir_recursive and make sure it exists. */ + +static bool +create_dir_and_check (const char *dir) +{ + ::mkdir_recursive (dir); + + struct stat st; + if (stat (dir, &st) != 0) + perror_with_name (("stat")); + + return (st.st_mode & S_IFDIR) != 0; +} + +/* Test mkdir_recursive. */ + +static void +test () +{ + char base[] = "/tmp/gdb-selftests-XXXXXX"; + + if (mkdtemp (base) == NULL) + perror_with_name (("mkdtemp")); + + /* Try not to leave leftover directories. */ + struct cleanup_dirs { + cleanup_dirs (const char *base) + : m_base (base) + {} + + ~cleanup_dirs () { + rmdir (string_printf ("%s/a/b/c/d/e", m_base).c_str ()); + rmdir (string_printf ("%s/a/b/c/d", m_base).c_str ()); + rmdir (string_printf ("%s/a/b/c", m_base).c_str ()); + rmdir (string_printf ("%s/a/b", m_base).c_str ()); + rmdir (string_printf ("%s/a", m_base).c_str ()); + rmdir (m_base); + } + + private: + const char *m_base; + } cleanup_dirs (base); + + std::string dir = string_printf ("%s/a/b", base); + SELF_CHECK (create_dir_and_check (dir.c_str ())); + + dir = string_printf ("%s/a/b/c//d/e/", base); + SELF_CHECK (create_dir_and_check (dir.c_str ())); +} + +} +} + +void +_initialize_mkdir_recursive_selftests () +{ +#if defined (HAVE_MKDTEMP) + selftests::register_test ("mkdir_recursive", + selftests::mkdir_recursive::test); +#endif +} + |