[Parted-commits] GNU Parted Official Repository: Changes to 'master'
Jim Meyering
meyering at alioth.debian.org
Tue May 29 20:26:28 UTC 2007
parted/parted.c | 23 ++++++++++----------
parted/table.c | 5 +++-
tests/Makefile.am | 1
tests/t0100-print.sh | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 75 insertions(+), 12 deletions(-)
New commits:
commit a7e4e516d537e914e76094dd76b94caf900f3b2a
Author: Jim Meyering <jim at meyering.net>
Date: Tue May 29 21:30:40 2007 +0200
Avoid a leak.
* parted/parted.c (do_print): Use separate variables for the header
and for individual rows. Free each when done.
* parted/table.c (table_add_row_from_strlist): Insert a newly
allocated copy of each string, so that the caller can free
the argument corresponding to the "list" parameter.
* tests/t0100-print.sh: New test for this.
* tests/Makefile.am (TESTS): Add t0100-print.sh.
diff --git a/parted/parted.c b/parted/parted.c
index 202558a..92e820d 100644
--- a/parted/parted.c
+++ b/parted/parted.c
@@ -1258,7 +1258,6 @@ do_print (PedDevice** dev)
PedUnit default_unit;
PedDisk* disk;
Table* table;
- StrList* row;
int has_extended;
int has_name;
int has_devices_arg = 0;
@@ -1404,30 +1403,30 @@ do_print (PedDevice** dev)
PedPartition* part;
if (!opt_machine_mode) {
+ StrList *row1;
if (ped_unit_get_default() == PED_UNIT_CHS) {
- row = str_list_create (_("Number"), _("Start"),
+ row1 = str_list_create (_("Number"), _("Start"),
_("End"), NULL);
} else {
- row = str_list_create (_("Number"), _("Start"),
+ row1 = str_list_create (_("Number"), _("Start"),
_("End"), _("Size"), NULL);
}
if (has_extended)
- str_list_append (row, _("Type"));
+ str_list_append (row1, _("Type"));
- str_list_append (row, _("File system"));
+ str_list_append (row1, _("File system"));
if (has_name)
- str_list_append (row, _("Name"));
+ str_list_append (row1, _("Name"));
- str_list_append (row, _("Flags"));
+ str_list_append (row1, _("Flags"));
- table = table_new (str_list_length(row));
-
- table_add_row_from_strlist (table, row);
+ table = table_new (str_list_length(row1));
+ table_add_row_from_strlist (table, row1);
for (part = ped_disk_next_partition (disk, NULL); part;
part = ped_disk_next_partition (disk, part)) {
@@ -1443,7 +1442,7 @@ do_print (PedDevice** dev)
else
sprintf (tmp, "%2s ", "");
- row = str_list_create (tmp, NULL);
+ StrList *row = str_list_create (tmp, NULL);
start = ped_unit_format (*dev, part->geom.start);
end = ped_unit_format_byte (
@@ -1485,6 +1484,7 @@ do_print (PedDevice** dev)
//PED_ASSERT (row.cols == caption.cols)
table_add_row_from_strlist (table, row);
+ str_list_destroy (row);
}
table_rendered = table_render (table);
@@ -1495,6 +1495,7 @@ do_print (PedDevice** dev)
#endif
ped_free (table_rendered);
table_destroy (table);
+ str_list_destroy (row1);
} else {
diff --git a/parted/table.c b/parted/table.c
index 23976a9..befb045 100644
--- a/parted/table.c
+++ b/parted/table.c
@@ -164,7 +164,10 @@ void table_add_row_from_strlist (Table* t, StrList* list)
while (list)
{
- row[i] = (wchar_t*)list->str;
+ row[i] = wcsdup (list->str);
+ if (row[i] == NULL)
+ xalloc_die ();
+
list = list->next;
++i;
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 27689c9..ecce727 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -1,5 +1,6 @@
TESTS = \
t0000-basic.sh \
+ t0100-print.sh \
t1000-mkpartfs.sh \
t1100-busy-label.sh \
t1500-small-ext2.sh \
diff --git a/tests/t0100-print.sh b/tests/t0100-print.sh
new file mode 100755
index 0000000..74c478e
--- /dev/null
+++ b/tests/t0100-print.sh
@@ -0,0 +1,58 @@
+#!/bin/sh
+
+# Copyright (C) 2007 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 2 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, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+# 02110-1301, USA.
+
+test_description="the most basic 'print' test"
+
+. ./init.sh
+
+dev=loop-file
+
+msdos_magic='\x55\xaa'
+
+test_expect_success \
+ "setup: create the most basic partition table, manually" \
+ '{ dd if=/dev/zero bs=510 count=1; printf "$msdos_magic"; } > $dev'
+
+test_expect_success \
+ 'print the empty table' \
+ 'parted -s $dev print >out 2>&1'
+
+pwd=`pwd`
+
+fail=0
+{
+ cat <<EOF
+Model: (file)
+Disk .../$dev: 512B
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+
+Number Start End Size Type File system Flags
+
+EOF
+} > exp || fail=1
+
+test_expect_success \
+ 'prepare actual and expected output' \
+ 'test $fail = 0 &&
+ mv out o2 && sed "s,^Disk .*/$dev:,Disk .../$dev:," o2 > out'
+
+test_expect_success 'check for expected output' '$compare out exp'
+
+test_done
More information about the Parted-commits
mailing list