LCOV - code coverage report
Current view: top level - basic - rm-rf.h (source / functions) Hit Total Coverage
Test: systemd_full.info Lines: 6 12 50.0 %
Date: 2019-08-23 13:36:53 Functions: 2 4 50.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 2 4 50.0 %

           Branch data     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                 :         56 : static inline void rm_rf_physical_and_free(char *p) {
      21                 :        112 :         PROTECT_ERRNO;
      22                 :         56 :         (void) rm_rf(p, REMOVE_ROOT|REMOVE_PHYSICAL);
      23                 :         56 :         free(p);
      24                 :         56 : }
      25         [ +  + ]:         76 : 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