On Fri, Jun 19, 2009 at 08:52:05PM +0200, Jim Meyering wrote: > Colin Watson wrote: > > One other thing I thought of is that perhaps linux-swap(old) and > > linux-swap(new) should also become aliases; I don't know whether the > > person who introduced them, or anyone else, is depending on them. I know > > that the Debian installer recently started using that name, but the > > change there was strictly contained to one program so it would be easy > > to adjust again. > > Good idea. > Extra credit if you can "deprecate" them, so that any > use evokes a warning that they'll be going away some day.
Your wish is my (belated) command. How's this? I included a NEWS entry as well, as you requested in another mail. -- Colin Watson [[email protected]]
>From e1fcfd82c249ddc8b01732e532afc1a40207cfde Mon Sep 17 00:00:00 2001 From: Colin Watson <[email protected]> Date: Fri, 10 Jul 2009 12:42:14 +0100 Subject: [PATCH] Rationalise linux-swap fs names, and add a "linux-swap" alias * libparted/filesys.c (ped_file_system_alias_register, ped_file_system_alias_unregister, ped_file_system_alias_get_next): New functions. (ped_file_system_type_get): Walk aliases as well. * include/parted/filesys.h (struct _PedFileSystemAlias): New structure. (ped_file_system_alias_register, ped_file_system_alias_unregister, ped_file_system_alias_get_next): Add prototypes. * parted/parted.c (_init_messages): Walk file system aliases as well as types. * parted/ui.c (init_fs_type_str): Likewise. * libparted/fs/linux_swap/linux_swap.c (_swap_v1_type, _swap_v1_open, _swap_v1_probe, _swap_v1_clobber, _swap_v1_ops): Rename to _swap_v0_type etc. to match version number used in mkswap. Update all users. (_swap_v2_type, _swap_v2_open, _swap_v2_probe, _swap_v2_clobber, _swap_v2_ops): Rename to _swap_v1_type etc. to match version number used in mkswap. Update all users. (_swap_v0_type): Rename type from "linux-swap(old)" to "linux-swap(v0)". (_swap_v1_type): Rename type from "linux-swap(new)" to "linux-swap(v1)". (ped_file_system_linux_swap_init, ped_file_system_linux_swap_done): Register/unregister a "linux-swap" alias for "linux-swap(v1)", and deprecated aliases "linux-swap(old)" and "linux-swap(new)". * libparted/labels/misc.h (is_linux_swap): Update comment. * tests/t2100-mkswap.sh: Refer to "linux-swap(v1)" rather than "linux-swap(new)". Test creation via the new alias. --- NEWS | 7 +++ include/parted/filesys.h | 21 +++++++++ libparted/filesys.c | 76 +++++++++++++++++++++++++++++++++- libparted/fs/linux_swap/linux_swap.c | 68 +++++++++++++++++------------- libparted/labels/misc.h | 2 +- parted/parted.c | 37 +++++++++++++++- parted/ui.c | 9 ++++ tests/t2100-mkswap.sh | 11 ++++- 8 files changed, 193 insertions(+), 38 deletions(-) diff --git a/NEWS b/NEWS index efeb258..f19d303 100644 --- a/NEWS +++ b/NEWS @@ -2,6 +2,13 @@ GNU parted NEWS -*- outline -*- * Noteworthy changes in release 1.9.0 (????-??-??) [stable] +libparted: +* The linux-swap "filesystem" types are now called "linux-swap(v0)" and + "linux-swap(v1)" rather than "linux-swap(old)" and "linux-swap(new)" + as in parted 1.8, or "linux-swap" as in older versions; "old" and + "new" generally make poor names, and v1 is the only format supported + by current Linux kernels. Aliases for all previous names are + available. * Noteworthy changes in release 1.8.8.1 (2007-12-17) [stable] diff --git a/include/parted/filesys.h b/include/parted/filesys.h index 644b13a..5dc6670 100644 --- a/include/parted/filesys.h +++ b/include/parted/filesys.h @@ -28,6 +28,7 @@ typedef struct _PedFileSystem PedFileSystem; typedef struct _PedFileSystemType PedFileSystemType; +typedef struct _PedFileSystemAlias PedFileSystemAlias; typedef const struct _PedFileSystemOps PedFileSystemOps; #include <parted/geom.h> @@ -62,6 +63,18 @@ struct _PedFileSystemType { PedFileSystemOps* const ops; }; +/** + * Structure describing a file system alias. This is separate from + * PedFileSystemType because probing only looks through the list of types, + * and does not probe aliases separately. + */ +struct _PedFileSystemAlias { + PedFileSystemAlias* next; + PedFileSystemType* fs_type; + const char* alias; + int deprecated; +}; + /** * Structure describing file system @@ -79,10 +92,18 @@ struct _PedFileSystem { extern void ped_file_system_type_register (PedFileSystemType* type); extern void ped_file_system_type_unregister (PedFileSystemType* type); +extern void ped_file_system_alias_register (PedFileSystemType* type, + const char* alias, int deprecated); +extern void ped_file_system_alias_unregister (PedFileSystemType* type, + const char* alias); + extern PedFileSystemType* ped_file_system_type_get (const char* name); extern PedFileSystemType* ped_file_system_type_get_next (const PedFileSystemType* fs_type); +extern PedFileSystemAlias* +ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias); + extern PedFileSystemType* ped_file_system_probe (PedGeometry* geom); extern PedGeometry* ped_file_system_probe_specific ( const PedFileSystemType* fs_type, diff --git a/libparted/filesys.c b/libparted/filesys.c index ba48a79..80ec147 100644 --- a/libparted/filesys.c +++ b/libparted/filesys.c @@ -41,6 +41,7 @@ #define BUFFER_SIZE 4096 /* in sectors */ static PedFileSystemType* fs_types = NULL; +static PedFileSystemAlias* fs_aliases = NULL; void ped_file_system_type_register (PedFileSystemType* fs_type) @@ -72,6 +73,49 @@ ped_file_system_type_unregister (PedFileSystemType* fs_type) fs_types = fs_type->next; } +void +ped_file_system_alias_register (PedFileSystemType* fs_type, const char* alias, + int deprecated) +{ + PedFileSystemAlias* fs_alias; + + PED_ASSERT (fs_type != NULL, return); + PED_ASSERT (alias != NULL, return); + + fs_alias = ped_malloc (sizeof (PedFileSystemAlias)); + if (!fs_alias) + return; + + fs_alias->next = fs_aliases; + fs_alias->fs_type = fs_type; + fs_alias->alias = alias; + fs_alias->deprecated = deprecated; + fs_aliases = fs_alias; +} + +void +ped_file_system_alias_unregister (PedFileSystemType* fs_type, + const char* alias) +{ + PedFileSystemAlias* walk; + PedFileSystemAlias* last = NULL; + + PED_ASSERT (fs_aliases != NULL, return); + PED_ASSERT (fs_type != NULL, return); + PED_ASSERT (alias != NULL, return); + + for (walk = fs_aliases; walk; last = walk, walk = walk->next) { + if (walk->fs_type == fs_type && !strcmp (walk->alias, alias)) + break; + } + + PED_ASSERT (walk != NULL, return); + if (last) + last->next = walk->next; + else + fs_aliases = walk->next; +} + /** * Get a PedFileSystemType by its @p name. * @@ -81,6 +125,7 @@ PedFileSystemType* ped_file_system_type_get (const char* name) { PedFileSystemType* walk; + PedFileSystemAlias* alias_walk; PED_ASSERT (name != NULL, return NULL); @@ -88,7 +133,22 @@ ped_file_system_type_get (const char* name) if (!strcasecmp (walk->name, name)) break; } - return walk; + if (walk != NULL) + return walk; + + for (alias_walk = fs_aliases; alias_walk != NULL; + alias_walk = alias_walk->next) { + if (!strcasecmp (alias_walk->alias, name)) + break; + } + if (alias_walk != NULL) { + if (alias_walk->deprecated) + PED_DEBUG (0, "File system alias %s is deprecated", + name); + return alias_walk->fs_type; + } + + return NULL; } /** @@ -106,6 +166,20 @@ ped_file_system_type_get_next (const PedFileSystemType* fs_type) } /** + * Get the next PedFileSystemAlias after @p fs_alias. + * + * @return @c NULL if @p fs_alias is the last item in the list. + */ +PedFileSystemAlias* +ped_file_system_alias_get_next (const PedFileSystemAlias* fs_alias) +{ + if (fs_alias) + return fs_alias->next; + else + return fs_aliases; +} + +/** * Attempt to find a file system and return the region it occupies. * * @param fs_type The file system type to probe for. diff --git a/libparted/fs/linux_swap/linux_swap.c b/libparted/fs/linux_swap/linux_swap.c index 62bb121..3676616 100644 --- a/libparted/fs/linux_swap/linux_swap.c +++ b/libparted/fs/linux_swap/linux_swap.c @@ -69,12 +69,12 @@ typedef struct { unsigned int max_bad_pages; } SwapSpecific; +static PedFileSystemType _swap_v0_type; static PedFileSystemType _swap_v1_type; -static PedFileSystemType _swap_v2_type; static PedFileSystemType _swap_swsusp_type; +static PedFileSystem* _swap_v0_open (PedGeometry* geom); static PedFileSystem* _swap_v1_open (PedGeometry* geom); -static PedFileSystem* _swap_v2_open (PedGeometry* geom); static PedFileSystem* _swap_swsusp_open (PedGeometry* geom); static int swap_close (PedFileSystem* fs); @@ -89,11 +89,11 @@ _generic_swap_probe (PedGeometry* geom, int kind) switch (kind) { /* Check for old style swap partitions. */ case 0: - fs = _swap_v1_open(geom); + fs = _swap_v0_open(geom); break; /* Check for new style swap partitions. */ case 1: - fs = _swap_v2_open(geom); + fs = _swap_v1_open(geom); break; /* Check for swap partitions containing swsusp data. */ case -1: @@ -135,11 +135,11 @@ _generic_swap_clobber (PedGeometry* geom, int kind) switch (kind) { /* Check for old style swap partitions. */ case 0: - fs = _swap_v1_open(geom); + fs = _swap_v0_open(geom); break; /* Check for new style swap partitions. */ case 1: - fs = _swap_v2_open(geom); + fs = _swap_v1_open(geom); break; /* Check for swap partitions containing swsusp data. */ case -1: @@ -222,7 +222,7 @@ swap_alloc (PedGeometry* geom) fs->geom = ped_geometry_duplicate (geom); if (!fs->geom) goto error_free_buffer; - fs->type = &_swap_v2_type; + fs->type = &_swap_v1_type; return fs; error_free_buffer: @@ -251,7 +251,7 @@ swap_free (PedFileSystem* fs) } static PedFileSystem* -_swap_v1_open (PedGeometry* geom) +_swap_v0_open (PedGeometry* geom) { PedFileSystem* fs; SwapSpecific* fs_info; @@ -293,7 +293,7 @@ error: } static PedFileSystem* -_swap_v2_open (PedGeometry* geom) +_swap_v1_open (PedGeometry* geom) { PedFileSystem* fs; SwapSpecific* fs_info; @@ -565,7 +565,7 @@ error: static PedFileSystem* swap_copy (const PedFileSystem* fs, PedGeometry* geom, PedTimer* timer) { - return ped_file_system_create (geom, &_swap_v2_type, timer); + return ped_file_system_create (geom, &_swap_v1_type, timer); } static int @@ -602,12 +602,12 @@ swap_get_copy_constraint (const PedFileSystem* fs, const PedDevice* dev) #endif /* !DISCOVER_ONLY */ static PedGeometry* -_swap_v1_probe (PedGeometry* geom) { +_swap_v0_probe (PedGeometry* geom) { return _generic_swap_probe (geom, 0); } static PedGeometry* -_swap_v2_probe (PedGeometry* geom) { +_swap_v1_probe (PedGeometry* geom) { return _generic_swap_probe (geom, 1); } @@ -617,12 +617,12 @@ _swap_swsusp_probe (PedGeometry* geom) { } static int -_swap_v1_clobber (PedGeometry* geom) { +_swap_v0_clobber (PedGeometry* geom) { return _generic_swap_clobber (geom, 0); } static int -_swap_v2_clobber (PedGeometry* geom) { +_swap_v1_clobber (PedGeometry* geom) { return _generic_swap_clobber (geom, 1); } @@ -631,11 +631,11 @@ _swap_swsusp_clobber (PedGeometry* geom) { return _generic_swap_clobber (geom, -1); } -static PedFileSystemOps _swap_v1_ops = { - probe: _swap_v1_probe, +static PedFileSystemOps _swap_v0_ops = { + probe: _swap_v0_probe, #ifndef DISCOVER_ONLY - clobber: _swap_v1_clobber, - open: _swap_v1_open, + clobber: _swap_v0_clobber, + open: _swap_v0_open, create: swap_create, close: swap_close, check: swap_check, @@ -658,11 +658,11 @@ static PedFileSystemOps _swap_v1_ops = { #endif /* !DISCOVER_ONLY */ }; -static PedFileSystemOps _swap_v2_ops = { - probe: _swap_v2_probe, +static PedFileSystemOps _swap_v1_ops = { + probe: _swap_v1_probe, #ifndef DISCOVER_ONLY - clobber: _swap_v2_clobber, - open: _swap_v2_open, + clobber: _swap_v1_clobber, + open: _swap_v1_open, create: swap_create, close: swap_close, check: swap_check, @@ -712,17 +712,17 @@ static PedFileSystemOps _swap_swsusp_ops = { #endif /* !DISCOVER_ONLY */ }; -static PedFileSystemType _swap_v1_type = { +static PedFileSystemType _swap_v0_type = { next: NULL, - ops: &_swap_v1_ops, - name: "linux-swap(old)", + ops: &_swap_v0_ops, + name: "linux-swap(v0)", block_sizes: LINUXSWAP_BLOCK_SIZES }; -static PedFileSystemType _swap_v2_type = { +static PedFileSystemType _swap_v1_type = { next: NULL, - ops: &_swap_v2_ops, - name: "linux-swap(new)", + ops: &_swap_v1_ops, + name: "linux-swap(v1)", block_sizes: LINUXSWAP_BLOCK_SIZES }; @@ -736,15 +736,23 @@ static PedFileSystemType _swap_swsusp_type = { void ped_file_system_linux_swap_init () { + ped_file_system_type_register (&_swap_v0_type); ped_file_system_type_register (&_swap_v1_type); - ped_file_system_type_register (&_swap_v2_type); ped_file_system_type_register (&_swap_swsusp_type); + + ped_file_system_alias_register (&_swap_v0_type, "linux-swap(old)", 1); + ped_file_system_alias_register (&_swap_v1_type, "linux-swap(new)", 1); + ped_file_system_alias_register (&_swap_v1_type, "linux-swap", 0); } void ped_file_system_linux_swap_done () { + ped_file_system_alias_unregister (&_swap_v0_type, "linux-swap(old)"); + ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap(new)"); + ped_file_system_alias_unregister (&_swap_v1_type, "linux-swap"); + + ped_file_system_type_unregister (&_swap_v0_type); ped_file_system_type_unregister (&_swap_v1_type); - ped_file_system_type_unregister (&_swap_v2_type); ped_file_system_type_unregister (&_swap_swsusp_type); } diff --git a/libparted/labels/misc.h b/libparted/labels/misc.h index a086e88..e69d518 100644 --- a/libparted/labels/misc.h +++ b/libparted/labels/misc.h @@ -18,7 +18,7 @@ /* Return nonzero if FS_TYPE_NAME starts with "linux-swap". This must match the NUL-terminated "linux-swap" as well - as "linux-swap(old)" and "linux-swap(new)". */ + as "linux-swap(v0)" and "linux-swap(v1)". */ static inline int is_linux_swap (char const *fs_type_name) { diff --git a/parted/parted.c b/parted/parted.c index e6364bf..17b2b6c 100644 --- a/parted/parted.c +++ b/parted/parted.c @@ -1983,6 +1983,7 @@ _init_messages () StrList* list; int first; PedFileSystemType* fs_type; + PedFileSystemAlias* fs_alias; PedDiskType* disk_type; PedPartitionFlag part_flag; PedUnit unit; @@ -2039,7 +2040,7 @@ _init_messages () label_type_msg = str_list_convert (list); str_list_destroy (list); -/* mkfs - file system types */ +/* mkfs - file system types and aliases */ list = str_list_create (_(fs_type_msg_start), NULL); first = 1; @@ -2054,12 +2055,23 @@ _init_messages () str_list_append (list, ", "); str_list_append (list, fs_type->name); } + for (fs_alias = ped_file_system_alias_get_next (NULL); + fs_alias; fs_alias = ped_file_system_alias_get_next (fs_alias)) { + if (fs_alias->fs_type->ops->create == NULL) + continue; + + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, fs_alias->alias); + } str_list_append (list, "\n"); mkfs_fs_type_msg = str_list_convert (list); str_list_destroy (list); -/* mkpart - file system types */ +/* mkpart - file system types and aliases */ list = str_list_create (_(fs_type_msg_start), NULL); first = 1; @@ -2071,12 +2083,20 @@ _init_messages () str_list_append (list, ", "); str_list_append (list, fs_type->name); } + for (fs_alias = ped_file_system_alias_get_next (NULL); + fs_alias; fs_alias = ped_file_system_alias_get_next (fs_alias)) { + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, fs_alias->alias); + } str_list_append (list, "\n"); mkpart_fs_type_msg = str_list_convert (list); str_list_destroy (list); -/* resize - file system types */ +/* resize - file system types and aliases */ list = str_list_create (_(resize_msg_start), NULL); first = 1; @@ -2091,6 +2111,17 @@ _init_messages () str_list_append (list, ", "); str_list_append (list, fs_type->name); } + for (fs_alias = ped_file_system_alias_get_next (NULL); + fs_alias; fs_alias = ped_file_system_alias_get_next (fs_alias)) { + if (fs_alias->fs_type->ops->resize == NULL) + continue; + + if (first) + first = 0; + else + str_list_append (list, ", "); + str_list_append (list, fs_alias->alias); + } str_list_append (list, "\n"); resize_fs_type_msg = str_list_convert (list); diff --git a/parted/ui.c b/parted/ui.c index 7b2a248..f50536c 100644 --- a/parted/ui.c +++ b/parted/ui.c @@ -1347,6 +1347,7 @@ static int init_fs_type_str () { PedFileSystemType* walk; + PedFileSystemAlias* alias_walk; fs_type_list = NULL; @@ -1357,6 +1358,14 @@ init_fs_type_str () if (!fs_type_list) return 0; } + for (alias_walk = ped_file_system_alias_get_next (NULL); alias_walk; + alias_walk = ped_file_system_alias_get_next (alias_walk)) + { + fs_type_list = str_list_insert (fs_type_list, + alias_walk->alias); + if (!fs_type_list) + return 0; + } return 1; } diff --git a/tests/t2100-mkswap.sh b/tests/t2100-mkswap.sh index cde1639..af8a15b 100755 --- a/tests/t2100-mkswap.sh +++ b/tests/t2100-mkswap.sh @@ -21,7 +21,7 @@ test_description='create linux-swap partitions' . $srcdir/test-lib.sh ###################################################################### -# When creating a partition of type linux-swap(new) in a DOS partition +# When creating a partition of type linux-swap(v1) in a DOS partition # table, ensure that the proper file system type (0x82) is used. # Some releases, e.g. parted-1.8.8 would mistakenly use 0x83. ###################################################################### @@ -44,7 +44,7 @@ test_expect_success 'expect no output' 'compare out /dev/null' test_expect_success \ 'create a linux-swap file system' \ - 'parted -s $dev mkfs 1 "linux-swap(new)" > out 2>&1' + 'parted -s $dev mkfs 1 "linux-swap(v1)" > out 2>&1' test_expect_success 'expect no output' 'compare out /dev/null' # Extract the byte at offset 451. It must be 0x82, not 0x83. @@ -69,7 +69,7 @@ test_expect_success 'expect no output' 'compare out /dev/null' test_expect_success \ 'create another linux-swap file system' \ - 'parted -s $dev2 mkfs 1 "linux-swap(new)" > out 2>&1' + 'parted -s $dev2 mkfs 1 "linux-swap(v1)" > out 2>&1' test_expect_success 'expect no output' 'compare out /dev/null' # partition starts at offset 16384; swap UUID is 1036 bytes in @@ -95,4 +95,9 @@ test_expect_success \ 'check preserves linux-swap UUID' \ 'compare uuid2 uuid2-new' +test_expect_success \ + 'create a linux-swap file system via alias' \ + 'parted -s $dev mkfs 1 linux-swap > out 2>&1' +test_expect_success 'expect no output' 'compare out /dev/null' + test_done -- 1.6.3.3
_______________________________________________ parted-devel mailing list [email protected] http://lists.alioth.debian.org/mailman/listinfo/parted-devel

