]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
lsfd: add the way to initialize and finalize classes
authorMasatake YAMATO <yamato@redhat.com>
Thu, 6 May 2021 14:51:00 +0000 (23:51 +0900)
committerKarel Zak <kzak@redhat.com>
Wed, 6 Oct 2021 09:01:53 +0000 (11:01 +0200)
Signed-off-by: Masatake YAMATO <yamato@redhat.com>
misc-utils/lsfd.c
misc-utils/lsfd.h

index 42528a20892eacbda21e6b7ea6f6c6fbbfad5ca5..dea7b323069df133c494ded859fdeba641f4ebac 100644 (file)
@@ -871,6 +871,36 @@ static void __attribute__((__noreturn__)) usage(void)
        exit(EXIT_SUCCESS);
 }
 
+static void initialize_class(const struct file_class *class)
+{
+       if (class->initialize_class)
+               class->initialize_class();
+}
+
+static void initialize_classes(void)
+{
+       initialize_class(&file_class);
+       initialize_class(&cdev_class);
+       initialize_class(&bdev_class);
+       initialize_class(&sock_class);
+       initialize_class(&unkn_class);
+}
+
+static void finalize_class(const struct file_class *class)
+{
+       if (class->finalize_class)
+               class->finalize_class();
+}
+
+static void finalize_classes(void)
+{
+       finalize_class(&file_class);
+       finalize_class(&cdev_class);
+       finalize_class(&bdev_class);
+       finalize_class(&sock_class);
+       finalize_class(&unkn_class);
+}
+
 int main(int argc, char *argv[])
 {
        int c;
@@ -964,6 +994,8 @@ int main(int argc, char *argv[])
                        scols_column_set_json_type(cl, col->json_type);
        }
 
+       initialize_classes();
+
        INIT_LIST_HEAD(&procs);
        collect(&procs, &ctl);
 
@@ -973,6 +1005,8 @@ int main(int argc, char *argv[])
 
        free_idcache(username_cache);
 
+       finalize_classes();
+
        return 0;
 }
 
index c7a81df960092470fca7694bbb6e43769de16d25..754df17126274b82f61405fde778c5bc9a8fe037 100644 (file)
@@ -123,6 +123,8 @@ struct file {
 struct file_class {
        const struct file_class *super;
        size_t size;
+       void (*initialize_class)(void);
+       void (*finalize_class)(void);
        bool (*fill_column)(struct proc *proc,
                            struct file *file,
                            struct libscols_line *ln,