All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Lothar Waßmann" <LW@KARO-electronics.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3 3/5] GPT: read partition table from device into a data structure
Date: Tue, 6 Jun 2017 10:28:45 +0200	[thread overview]
Message-ID: <20170606102845.3fd12018@karo-electronics.de> (raw)
In-Reply-To: <1496456554-6816-4-git-send-email-alison@peloton-tech.com>

Hi,

On Fri,  2 Jun 2017 19:22:32 -0700 alison at peloton-tech.com wrote:
> From: Alison Chaiken <alison@peloton-tech.com>
> 
> Make the partition table available for modification by reading it from
> the user-specified device into a linked list.   Provide an accessor
> function for command-line testing.
> 
> Signed-off-by: Alison Chaiken <alison@peloton-tech.com>
> ---
>  cmd/gpt.c      | 112 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
>  include/part.h |   7 ++++
>  2 files changed, 119 insertions(+)
> 
> diff --git a/cmd/gpt.c b/cmd/gpt.c
> index 4d00a35..5c2651f 100644
> --- a/cmd/gpt.c
> +++ b/cmd/gpt.c
> @@ -19,6 +19,9 @@
>  #include <linux/ctype.h>
>  #include <div64.h>
>  #include <memalign.h>
> +#include <linux/compat.h>
> +
> +static LIST_HEAD(disk_partitions);
>  
>  /**
>   * extract_env(): Expand env name from string format '&{env_name}'
> @@ -151,6 +154,111 @@ static bool found_key(const char *str, const char *key)
>  	return result;
>  }
>  
> +static void del_gpt_info(void)
> +{
> +	struct list_head *pos = &disk_partitions;
> +	struct disk_part *curr;
> +	while (!list_empty(pos)) {
> +		curr = list_entry(pos->next, struct disk_part, list);
> +		list_del(pos->next);
> +		free(curr);
> +	}
> +}
> +
> +static struct disk_part *allocate_disk_part(disk_partition_t *info, int partnum)
> +{
> +	struct disk_part *newpart;
> +	newpart = (struct disk_part *)malloc(sizeof(*newpart));
> +	if (!newpart)
> +		return ERR_PTR(-ENOMEM);
> +	memset(newpart, '\0', sizeof(newpart));
> +
> +	newpart->gpt_part_info.start = info->start;
> +	newpart->gpt_part_info.size = info->size;
> +	newpart->gpt_part_info.blksz = info->blksz;
> +	strncpy((char *)newpart->gpt_part_info.name, (const char *)info->name, PART_NAME_LEN);
> +	newpart->gpt_part_info.name[PART_NAME_LEN - 1] = '\0';
> +	strncpy((char *)newpart->gpt_part_info.type, (const char *)info->type, PART_TYPE_LEN);
> +	newpart->gpt_part_info.type[PART_TYPE_LEN - 1] = '\0';
> +	newpart->gpt_part_info.bootable = info->bootable;
> +#ifdef CONFIG_PARTITION_UUIDS
> +	strncpy(newpart->gpt_part_info.uuid, (const char *)info->uuid,
> +		UUID_STR_LEN);
> +#endif
> +	newpart->partnum = partnum;
> +
> +	return newpart;
> +}
> +
> +static void print_gpt_info(void)
> +{
> +	struct list_head *pos;
> +	struct disk_part *curr;
> +
> +	list_for_each(pos, &disk_partitions) {
> +		curr = list_entry(pos, struct disk_part, list);
> +		printf("Partition %d:\n", curr->partnum);
> +		printf("1st block %x, size %x\n", (unsigned)curr->gpt_part_info.start,
> +		       (unsigned)curr->gpt_part_info.size);
> +		printf("Block size %lu, name %s\n", curr->gpt_part_info.blksz,
> +		       curr->gpt_part_info.name);
> +		printf("Type %s, bootable %d\n", curr->gpt_part_info.type,
> +		       curr->gpt_part_info.bootable);
> +#ifdef CONFIG_PARTITION_UUIDS
> +		printf("UUID %s\n", curr->gpt_part_info.uuid);
> +#endif
> +		printf("\n");
> +	}
> +}
> +
> +/*
> + * read partition info into disk_partitions list where
> + * it can be printed or modified
> + */
> +static int get_gpt_info(struct blk_desc *dev_desc)
> +{
> +	/* start partition numbering at 1, as U-Boot does */
> +	int valid_parts = 1, p, ret;
> +	disk_partition_t info;
> +	struct disk_part *new_disk_part;
> +
> +	if (disk_partitions.next == NULL)
> +		INIT_LIST_HEAD(&disk_partitions);
> +
> +	for (p = 1; p <= MAX_SEARCH_PARTITIONS; p++) {
> +		ret = part_get_info(dev_desc, p, &info);
> +		if (ret)
> +			continue;
> +
> +		new_disk_part = allocate_disk_part(&info, valid_parts);
> +		if (IS_ERR(new_disk_part) && valid_parts >= 2)
> +			return -ENODEV;
>
del_gpt_info()? This calls for a common error exit which does the
cleanup.

> +
> +		list_add_tail(&new_disk_part->list, &disk_partitions);
> +		valid_parts++;
> +	}
> +	if (!valid_parts) {
> +		printf("** No valid partitions found **\n");
> +		del_gpt_info();
> +		return -ENODEV;
> +	}
> +	return --valid_parts;
> +}
> +


Lothar Waßmann

  reply	other threads:[~2017-06-06  8:28 UTC|newest]

Thread overview: 116+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-21  2:27 [U-Boot] [PATCH 0/3] add support for GPT partition name manipulation alison at peloton-tech.com
2017-05-21  2:27 ` [U-Boot] [PATCH 1/3] GPT: add accessor function for disk GUID alison at peloton-tech.com
2017-05-26 12:38   ` Tom Rini
2017-05-21  2:27 ` [U-Boot] [PATCH 2/3] GPT: read partition table from device into a data structure alison at peloton-tech.com
2017-05-26 12:39   ` Tom Rini
2017-05-21  2:27 ` [U-Boot] [PATCH 3/3] rename GPT partitions to detect boot failure alison at peloton-tech.com
2017-05-26 12:39   ` Tom Rini
2017-05-29  9:25   ` Lothar Waßmann
2017-05-26 12:38 ` [U-Boot] [PATCH 0/3] add support for GPT partition name manipulation Tom Rini
2017-05-29 16:49   ` [U-Boot] [PATCH v2 0/6] " alison at peloton-tech.com
2017-05-29 16:49     ` [U-Boot] [PATCH v2 1/6] EFI: replace number with UUID_STR_LEN macro alison at peloton-tech.com
2017-05-31  2:07       ` Tom Rini
2017-05-31  7:37       ` Lukasz Majewski
2017-05-29 16:49     ` [U-Boot] [PATCH v2 2/6] disk_partition: introduce macros for description string lengths alison at peloton-tech.com
2017-05-31  7:37       ` Lukasz Majewski
2017-05-31 13:50       ` Tom Rini
2017-05-29 16:49     ` [U-Boot] [PATCH v2 3/6] GPT: add accessor function for disk GUID alison at peloton-tech.com
2017-05-30  6:46       ` Lothar Waßmann
2017-06-03  2:22         ` [U-Boot] [PATCH v3 0/5] add support for GPT partition name manipulation alison at peloton-tech.com
2017-06-03  2:22           ` [U-Boot] [PATCH v3 1/5] GPT: add accessor function for disk GUID alison at peloton-tech.com
2017-06-06  8:20             ` Lothar Waßmann
2017-06-10  5:27               ` [U-Boot] [PATCH v5 1/3] " alison at peloton-tech.com
2017-06-11 13:38                 ` Tom Rini
2017-06-03  2:22           ` [U-Boot] [PATCH v3 2/5] partitions: increase MAX_SEARCH_PARTITIONS and move to part.h alison at peloton-tech.com
2017-06-03 11:52             ` Lukasz Majewski
2017-06-03  2:22           ` [U-Boot] [PATCH v3 3/5] GPT: read partition table from device into a data structure alison at peloton-tech.com
2017-06-06  8:28             ` Lothar Waßmann [this message]
2017-06-10  5:30               ` [U-Boot] [PATCH v5 2/3] " alison at peloton-tech.com
2017-06-11 13:38                 ` Tom Rini
2017-06-06 10:43             ` [U-Boot] [PATCH v3 3/5] " Lothar Waßmann
2017-06-03  2:22           ` [U-Boot] [PATCH v3 4/5] rename GPT partitions to detect boot failure alison at peloton-tech.com
2017-06-06  8:20             ` Lothar Waßmann
2017-06-10  5:35               ` [U-Boot] [PATCH v5 3/3] " alison at peloton-tech.com
2017-06-10  6:51                 ` Wolfgang Denk
2017-06-10 23:27                   ` Alison Chaiken
2017-06-10 23:33                   ` [U-Boot] [PATCH v6 3/3] GPT: provide commands to selectively rename partitions alison at peloton-tech.com
2017-06-11 13:38                     ` Tom Rini
2017-06-11 16:03                       ` [U-Boot] [PATCH v7] " alison at peloton-tech.com
2017-06-12  7:45                     ` [U-Boot] [PATCH v6 3/3] " Wolfgang Denk
2017-06-12 14:24                       ` Alison Chaiken
2017-06-12 14:56                         ` Tom Rini
2017-06-18 11:08                           ` Wolfgang Denk
2017-06-25 23:43                             ` [U-Boot] [PATCH v7 0/9] add support for GPT partition name manipulation alison at peloton-tech.com
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 1/9] EFI: replace number with UUID_STR_LEN macro alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 2/9] disk_partition: introduce macros for description string lengths alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 3/9] GPT: fix error in partitions string doc alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 4/9] sandbox: README: fix partition command invocation alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 5/9] cmd gpt: test in sandbox alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot,v7,5/9] " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 6/9] partitions: increase MAX_SEARCH_PARTITIONS and move to part.h alison at peloton-tech.com
2017-08-07 13:54                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 7/9] GPT: add accessor function for disk GUID alison at peloton-tech.com
2017-08-07 13:55                                 ` [U-Boot] [U-Boot, v7, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 8/9] GPT: read partition table from device into a data structure alison at peloton-tech.com
2017-06-26  7:34                                 ` Lothar Waßmann
2017-07-01 22:42                                   ` [U-Boot] [PATCH v8 8/10] " alison at peloton-tech.com
2017-07-03  6:52                                     ` Lothar Waßmann
2017-07-04 18:18                                       ` [U-Boot] [PATCH v8 08/10] " alison at peloton-tech.com
2017-08-07 13:55                                         ` [U-Boot] [U-Boot, v8, " Tom Rini
2017-06-25 23:43                               ` [U-Boot] [PATCH v7 9/9] GPT: provide commands to selectively rename partitions alison at peloton-tech.com
2017-06-26  1:52                                 ` Bin Meng
2017-06-26  2:11                                   ` alison at peloton-tech.com
2017-06-26  7:55                                 ` Lothar Waßmann
2017-07-01 22:44                                   ` [U-Boot] [PATCH 09/10] " alison at peloton-tech.com
2017-06-18 11:03                         ` [U-Boot] [PATCH v6 3/3] " Wolfgang Denk
2017-06-25 21:54                           ` Alison Chaiken
2017-06-26 22:47                             ` Tom Rini
2017-06-27  7:05                             ` Lothar Waßmann
2017-06-27  9:12                               ` Lothar Waßmann
2017-07-01 22:44                                 ` [U-Boot] [PATCH 10/10] gpt: harden set_gpt_info() against non NULL-terminated strings alison at peloton-tech.com
2017-07-03  6:37                                   ` Lothar Waßmann
2017-07-04 18:19                                     ` [U-Boot] [PATCH v2 " alison at peloton-tech.com
2017-08-07 13:55                                       ` [U-Boot] [U-Boot, v2, " Tom Rini
2017-07-01 22:36                               ` [U-Boot] [PATCH v6 3/3] GPT: provide commands to selectively rename partitions Alison Chaiken
2017-07-03  6:40                                 ` Lothar Waßmann
2017-07-04 18:19                                   ` [U-Boot] [PATCH v8 09/10] " alison at peloton-tech.com
2017-08-07 13:55                                     ` [U-Boot] [U-Boot, v8, " Tom Rini
2017-06-03  2:22           ` [U-Boot] [PATCH v3 5/5] GPT: fix error in partitions string doc alison at peloton-tech.com
2017-06-03 11:48           ` [U-Boot] [PATCH v3 0/5] add support for GPT partition name manipulation Lukasz Majewski
2017-05-31  7:44       ` [U-Boot] [PATCH v2 3/6] GPT: add accessor function for disk GUID Lukasz Majewski
2017-05-31  8:47         ` Lothar Waßmann
2017-05-29 16:49     ` [U-Boot] [PATCH v2 4/6] GPT: read partition table from device into a data structure alison at peloton-tech.com
2017-05-30  7:37       ` Lothar Waßmann
2017-06-01  6:34         ` Chaiken, Alison
2017-06-01  9:48           ` Lothar Waßmann
2017-05-31  7:48       ` Lukasz Majewski
2017-05-31  8:48         ` Lothar Waßmann
2017-05-31 11:11           ` Lukasz Majewski
2017-05-31 13:42             ` Lothar Waßmann
2017-05-31 14:07         ` Lukasz Majewski
2017-05-29 16:49     ` [U-Boot] [PATCH v2 5/6] rename GPT partitions to detect boot failure alison at peloton-tech.com
2017-05-30  7:38       ` Lothar Waßmann
2017-05-31  8:12       ` Lukasz Majewski
2017-06-01  7:04         ` Chaiken, Alison
2017-06-01  8:21           ` Lukasz Majewski
2017-06-01 15:06             ` Chaiken, Alison
2017-06-01 18:20               ` Lukasz Majewski
2017-06-04 22:11         ` [U-Boot] [PATCH v4 0/5] add support for GPT partition name manipulation alison at peloton-tech.com
2017-06-04 22:11           ` [U-Boot] [PATCH v4 1/5] GPT: read partition table from device into a data structure alison at peloton-tech.com
2017-06-04 22:11           ` [U-Boot] [PATCH v4 2/5] rename GPT partitions to detect boot failure alison at peloton-tech.com
2017-06-04 22:11           ` [U-Boot] [PATCH v4 3/5] GPT: fix error in partitions string doc alison at peloton-tech.com
2017-06-04 22:11           ` [U-Boot] [PATCH 4/5] sandbox: README: fix partition command invocation alison at peloton-tech.com
2017-06-09 12:28             ` Simon Glass
2017-06-15 19:21               ` sjg at google.com
2017-06-04 22:11           ` [U-Boot] [PATCH 5/5] cmd gpt: test in sandbox alison at peloton-tech.com
2017-06-15 19:21             ` sjg at google.com
2017-08-27 23:02         ` [U-Boot] [PATCH v2 5/6] rename GPT partitions to detect boot failure Chaiken, Alison
2017-08-28  7:54           ` Łukasz Majewski
2017-08-28 11:16             ` Tom Rini
2017-05-29 16:49     ` [U-Boot] [PATCH v2 6/6] GPT: fix error in partitions string doc alison at peloton-tech.com
2017-05-31  8:14       ` Lukasz Majewski
2017-05-31 11:21         ` Lukasz Majewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170606102845.3fd12018@karo-electronics.de \
    --to=lw@karo-electronics.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.