LCOV - code coverage report
Current view: top level - basic - rm-rf.h (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 6 12 50.0 %
Date: 2019-08-22 15:41:25 Functions: 2 4 50.0 %

          Line data    Source code
       1             : /* SPDX-License-Identifier: LGPL-2.1+ */
       2             : #pragma once
       3             : 
       4             : #include <sys/stat.h>
       5             : 
       6             : #include "errno-util.h"
       7             : 
       8             : typedef enum RemoveFlags {
       9             :         REMOVE_ONLY_DIRECTORIES = 1 << 0, /* Only remove empty directories, no files */
      10             :         REMOVE_ROOT             = 1 << 1, /* Remove the specified directory itself too, not just the contents of it */
      11             :         REMOVE_PHYSICAL         = 1 << 2, /* If not set, only removes files on tmpfs, never physical file systems */
      12             :         REMOVE_SUBVOLUME        = 1 << 3, /* Drop btrfs subvolumes in the tree too */
      13             :         REMOVE_MISSING_OK       = 1 << 4, /* If the top-level directory is missing, ignore the ENOENT for it */
      14             : } RemoveFlags;
      15             : 
      16             : int rm_rf_children(int fd, RemoveFlags flags, struct stat *root_dev);
      17             : int rm_rf(const char *path, RemoveFlags flags);
      18             : 
      19             : /* Useful for usage with _cleanup_(), destroys a directory and frees the pointer */
      20          14 : static inline void rm_rf_physical_and_free(char *p) {
      21          28 :         PROTECT_ERRNO;
      22          14 :         (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL);
      23          14 :         free(p);
      24          14 : }
      25          19 : DEFINE_TRIVIAL_CLEANUP_FUNC(char*, rm_rf_physical_and_free);
      26             : 
      27             : /* Similar as above, but also has magic btrfs subvolume powers */
      28           0 : static inline void rm_rf_subvolume_and_free(char *p) {
      29           0 :         PROTECT_ERRNO;
      30           0 :         (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_SUBVOLUME);
      31           0 :         free(p);
      32           0 : }
      33           0 : DEFINE_TRIVIAL_CLEANUP_FUNC(char*, rm_rf_subvolume_and_free);

Generated by: LCOV version 1.14