This is present in the daemon, but the function could be used throughout the code. --- common/cleanups/cleanups.h | 4 ++++ common/cleanups/stdlib-cleanups.c | 9 +++++++++ 2 files changed, 13 insertions(+)
diff --git a/common/cleanups/cleanups.h b/common/cleanups/cleanups.h index 211bce98a..70021e94e 100644 --- a/common/cleanups/cleanups.h +++ b/common/cleanups/cleanups.h @@ -26,6 +26,8 @@ __attribute__((cleanup(guestfs_int_cleanup_hash_free))) #define CLEANUP_UNLINK_FREE \ __attribute__((cleanup(guestfs_int_cleanup_unlink_free))) +#define CLEANUP_CLOSE \ + __attribute__((cleanup(guestfs_int_cleanup_close))) #define CLEANUP_FCLOSE \ __attribute__((cleanup(guestfs_int_cleanup_fclose))) #define CLEANUP_PCLOSE \ @@ -48,6 +50,7 @@ #define CLEANUP_FREE #define CLEANUP_HASH_FREE #define CLEANUP_UNLINK_FREE +#define CLEANUP_CLOSE #define CLEANUP_FCLOSE #define CLEANUP_PCLOSE #define CLEANUP_XMLFREE @@ -65,6 +68,7 @@ extern void guestfs_int_cleanup_free (void *ptr); extern void guestfs_int_cleanup_hash_free (void *ptr); extern void guestfs_int_cleanup_unlink_free (char **ptr); +extern void guestfs_int_cleanup_close (void *ptr); extern void guestfs_int_cleanup_fclose (void *ptr); extern void guestfs_int_cleanup_pclose (void *ptr); extern void guestfs_int_cleanup_xmlFree (void *ptr); diff --git a/common/cleanups/stdlib-cleanups.c b/common/cleanups/stdlib-cleanups.c index 0512a86a2..e77708db4 100644 --- a/common/cleanups/stdlib-cleanups.c +++ b/common/cleanups/stdlib-cleanups.c @@ -83,6 +83,15 @@ guestfs_int_cleanup_unlink_free (char **ptr) } void +guestfs_int_cleanup_close (void *ptr) +{ + const int fd = * (int *) ptr; + + if (fd >= 0) + close (fd); +} + +void guestfs_int_cleanup_fclose (void *ptr) { FILE *f = * (FILE **) ptr; -- 2.13.0 _______________________________________________ Libguestfs mailing list Libguestfs@redhat.com https://www.redhat.com/mailman/listinfo/libguestfs