/* libparted - a library for manipulating disk partitions Copyright (C) 1999-2001, 2007-2014, 2019-2023 Free Software Foundation, Inc. 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 . */ #include #include "configmake.h" #include #include #include "architecture.h" #if ENABLE_NLS # include # include # define _(String) dgettext (PACKAGE, String) #else # define _(String) (String) #endif /* ENABLE_NLS */ /* ped_malloc() debugging. Stick the address and size of memory blocks that * weren't free()d in here, and an exception will be thrown when it is * allocated. That way, you can find out what, exactly, the allocated thing * is, and where it is created. */ typedef struct { void* pointer; size_t size; } pointer_size_type; /* IMHO, none of the DEBUG-related code below is useful, and the ped_malloc memset code is actually quite harmful: it masked at least two nasty bugs that were fixed in June of 2007. */ #undef DEBUG #ifdef DEBUG static pointer_size_type dodgy_malloc_list[] = { {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0} }; static int dodgy_memory_active[100]; #endif /* DEBUG */ extern void ped_disk_aix_init (); extern void ped_disk_bsd_init (); extern void ped_disk_dvh_init (); extern void ped_disk_gpt_init (); extern void ped_disk_loop_init (); extern void ped_disk_mac_init (); extern void ped_disk_msdos_init (); extern void ped_disk_pc98_init (); extern void ped_disk_sun_init (); extern void ped_disk_amiga_init (); extern void ped_disk_dasd_init (); extern void ped_disk_atari_init (); static void init_disk_types () { /* Note that probing is done in the reverse order of init */ ped_disk_loop_init (); /* must be last in the probe list */ #if defined __s390__ || defined __s390x__ ped_disk_dasd_init(); #endif ped_disk_atari_init (); /* easy false positives, so probe others first */ ped_disk_sun_init (); #ifdef ENABLE_PC98 ped_disk_pc98_init (); #endif ped_disk_msdos_init (); ped_disk_mac_init (); ped_disk_gpt_init (); ped_disk_dvh_init (); ped_disk_bsd_init (); ped_disk_amiga_init (); ped_disk_aix_init (); } extern void ped_file_system_amiga_init (void); extern void ped_file_system_xfs_init (void); extern void ped_file_system_ufs_init (void); extern void ped_file_system_reiserfs_init (void); extern void ped_file_system_ntfs_init (void); extern void ped_file_system_linux_swap_init (void); extern void ped_file_system_jfs_init (void); extern void ped_file_system_hfs_init (void); extern void ped_file_system_fat_init (void); extern void ped_file_system_f2fs_init (void); extern void ped_file_system_ext2_init (void); extern void ped_file_system_nilfs2_init (void); extern void ped_file_system_btrfs_init (void); extern void ped_file_system_udf_init (void); static void init_file_system_types () { ped_file_system_amiga_init (); ped_file_system_xfs_init (); ped_file_system_ufs_init (); ped_file_system_reiserfs_init (); ped_file_system_ntfs_init (); ped_file_system_linux_swap_init (); ped_file_system_jfs_init (); ped_file_system_hfs_init (); ped_file_system_fat_init (); ped_file_system_f2fs_init (); ped_file_system_ext2_init (); ped_file_system_nilfs2_init (); ped_file_system_btrfs_init (); ped_file_system_udf_init (); } extern void ped_disk_aix_done (); extern void ped_disk_bsd_done (); extern void ped_disk_dvh_done (); extern void ped_disk_gpt_done (); extern void ped_disk_loop_done (); extern void ped_disk_mac_done (); extern void ped_disk_msdos_done (); extern void ped_disk_pc98_done (); extern void ped_disk_sun_done (); extern void ped_disk_amiga_done (); extern void ped_disk_dasd_done (); extern void ped_disk_atari_done (); static void done_disk_types () { #if defined __s390__ || __s390x__ ped_disk_dasd_done (); #endif ped_disk_sun_done (); #ifdef ENABLE_PC98 ped_disk_pc98_done (); #endif ped_disk_msdos_done (); ped_disk_mac_done (); ped_disk_loop_done (); ped_disk_gpt_done (); ped_disk_dvh_done (); ped_disk_bsd_done (); ped_disk_amiga_done (); ped_disk_aix_done (); ped_disk_atari_done (); } static void _init() __attribute__ ((constructor)); static void _init() { #ifdef ENABLE_NLS bindtextdomain (PACKAGE, LOCALEDIR); #endif init_disk_types (); init_file_system_types (); ped_set_architecture (); #ifdef DEBUG memset (dodgy_memory_active, 0, sizeof (dodgy_memory_active)); #endif } extern void ped_file_system_nilfs2_done (void); extern void ped_file_system_ext2_done (void); extern void ped_file_system_fat_done (void); extern void ped_file_system_f2fs_done (void); extern void ped_file_system_hfs_done (void); extern void ped_file_system_jfs_done (void); extern void ped_file_system_linux_swap_done (void); extern void ped_file_system_ntfs_done (void); extern void ped_file_system_reiserfs_done (void); extern void ped_file_system_ufs_done (void); extern void ped_file_system_xfs_done (void); extern void ped_file_system_amiga_done (void); extern void ped_file_system_btrfs_done (void); extern void ped_file_system_udf_done (void); static void done_file_system_types () { ped_file_system_nilfs2_done (); ped_file_system_ext2_done (); ped_file_system_f2fs_done (); ped_file_system_fat_done (); ped_file_system_hfs_done (); ped_file_system_jfs_done (); ped_file_system_linux_swap_done (); ped_file_system_ntfs_done (); ped_file_system_reiserfs_done (); ped_file_system_ufs_done (); ped_file_system_xfs_done (); ped_file_system_amiga_done (); ped_file_system_btrfs_done (); ped_file_system_udf_done (); } static void _done() __attribute__ ((destructor)); static void _done() { ped_device_free_all (); done_disk_types (); done_file_system_types (); } const char* ped_get_version () { return VERSION; } void* ped_malloc (size_t size) { void* mem; mem = (void*) malloc (size); if (!mem) { ped_exception_throw (PED_EXCEPTION_FATAL, PED_EXCEPTION_CANCEL, _("Out of memory.")); return NULL; } return mem; } void* ped_calloc (size_t size) { void* buf = ped_malloc (size); memset (buf, 0, size); return buf; }