All of lore.kernel.org
 help / color / mirror / Atom feed
From: Petr Uzel <petr.uzel@suse.cz>
To: util-linux <util-linux@vger.kernel.org>
Cc: Davidlohr Bueso <dave@gnu.org>
Subject: Re: [PATCH 03/10] fdisk: API: add fdisk_label_change
Date: Tue, 24 Jul 2012 11:52:54 +0200	[thread overview]
Message-ID: <20120724095254.GC2086@foxbat.suse.cz> (raw)
In-Reply-To: <1342976704.2863.13.camel@offbook>

[-- Attachment #1: Type: text/plain, Size: 4433 bytes --]

On Sun, Jul 22, 2012 at 07:05:04PM +0200, Davidlohr Bueso wrote:
> From: Davidlohr Bueso <dave@gnu.org>
> 
> A new fdisk_label_change() function is added for situations when the disk label is
> changed (ie: creating a new sun label). This function only updates the label pointer
> in the context to use the newly specified label type.

Why can't we just call __probe_labels() after creating new label, e.g.
in soon-to-be introduced fdisk_label_create()?

> 
> Signed-off-by: Davidlohr Bueso <dave@gnu.org>
> ---
>  fdisks/fdisk.h         |    2 ++
>  fdisks/fdiskdoslabel.c |    1 +
>  fdisks/fdisksgilabel.c |    2 ++
>  fdisks/fdisksunlabel.c |    1 +
>  fdisks/utils.c         |   37 +++++++++++++++++++++++++++++++++++++
>  5 files changed, 43 insertions(+), 0 deletions(-)
> 
> diff --git a/fdisks/fdisk.h b/fdisks/fdisk.h
> index d716824..d7e85f5 100644
> --- a/fdisks/fdisk.h
> +++ b/fdisks/fdisk.h
> @@ -104,6 +104,7 @@ enum fdisk_error {
>  	FDISK_ERROR_WRITE,
>  	FDISK_ERROR_IOCTL,
>  	FDISK_ERROR_PROBE,
> +	FDISK_ERROR_NOLABEL,
>  	FDISK_ERROR_UNKNOWN
>  };
>  
> @@ -164,6 +165,7 @@ extern void fdisk_mbr_zeroize(struct fdisk_context *cxt);
>  extern void fdisk_geom_set_cyls(struct fdisk_context *cxt);
>  extern const char *fdisk_error_name(enum fdisk_error errcode);
>  extern void fdisk_error_fatal(struct fdisk_context *cxt, enum fdisk_error errcode);
> +extern int fdisk_label_change(struct fdisk_context *cxt, const char *name);
>  
>  /* prototypes for fdisk.c */
>  extern char *disk_device, *line_ptr;
> diff --git a/fdisks/fdiskdoslabel.c b/fdisks/fdiskdoslabel.c
> index 535afdc..9b9b23a 100644
> --- a/fdisks/fdiskdoslabel.c
> +++ b/fdisks/fdiskdoslabel.c
> @@ -230,6 +230,7 @@ void create_doslabel(struct fdisk_context *cxt)
>  
>  	dos_init(cxt);
>  	fdisk_mbr_zeroize(cxt);
> +	fdisk_label_change(cxt, "dos");
>  	set_all_unchanged();
>  	set_changed(0);
>  
> diff --git a/fdisks/fdisksgilabel.c b/fdisks/fdisksgilabel.c
> index e38d98f..6001038 100644
> --- a/fdisks/fdisksgilabel.c
> +++ b/fdisks/fdisksgilabel.c
> @@ -780,6 +780,8 @@ create_sgilabel(struct fdisk_context *cxt)
>  		}
>  
>  	fdisk_mbr_zeroize(cxt);
> +	fdisk_label_change(cxt, "sgi");
> +
>  	sgilabel->magic = SSWAP32(SGI_LABEL_MAGIC);
>  	sgilabel->boot_part = SSWAP16(0);
>  	sgilabel->swap_part = SSWAP16(1);
> diff --git a/fdisks/fdisksunlabel.c b/fdisks/fdisksunlabel.c
> index 4123806..b63335c 100644
> --- a/fdisks/fdisksunlabel.c
> +++ b/fdisks/fdisksunlabel.c
> @@ -161,6 +161,7 @@ void create_sunlabel(struct fdisk_context *cxt)
>  
>  	init();
>  	fdisk_mbr_zeroize(cxt);
> +	fdisk_label_change(cxt, "sun");
>  
>  	sunlabel->magic = SSWAP16(SUN_LABEL_MAGIC);
>  	sunlabel->sanity = SSWAP32(SUN_LABEL_SANE);
> diff --git a/fdisks/utils.c b/fdisks/utils.c
> index cf9484c..48dedfb 100644
> --- a/fdisks/utils.c
> +++ b/fdisks/utils.c
> @@ -44,6 +44,43 @@ static const struct fdisk_label *labels[] =
>  	&mac_label,
>  };
>  
> +/**
> + * fdisk_label_change:
> + * @cxt: fdisk context
> + * @name: new label name
> + *
> + * Updates the disk label type to the one specified by @name.
> + *
> + * Returns 0 on success, otherwise, a corresponding error.
> + */
> +int fdisk_label_change(struct fdisk_context *cxt, const char *name)
> +{
> +	int i;
> +
> +	if (!cxt || !cxt->label || !name)
> +		return FDISK_ERROR_UNKNOWN;
> +
> +	/* not really changing the label */
> +	if (!strncmp(name, cxt->label->name, strlen(name)))
> +		goto done;
> +
> +	for (i = 0; i < ARRAY_SIZE(labels); i++) {
> +		if (strncmp(name, labels[i]->name, strlen(name)))
> +			continue;
> +	
> +		/* found the new label */
> +		memset(cxt->label, 0, sizeof(struct fdisk_label));
> +		memcpy(cxt->label, labels[i], sizeof(struct fdisk_label));
> +		DBG(LABEL, dbgprint("changing to a %s label\n", labels[i]->name));
> +		goto done;
> +	}
> +
> +	/* couldn't find the requested label type */
> +	return FDISK_ERROR_NOLABEL;
> +done:
> +	return 0;
> +}
> +
>  static int __probe_labels(struct fdisk_context *cxt)
>  {
>  	int i, rc = 0;
> -- 
> 1.7.4.1
> 
> 
> 
> 
> --
> To unsubscribe from this list: send the line "unsubscribe util-linux" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

Petr

-- 
Petr Uzel
IRC: ptr_uzl @ freenode

[-- Attachment #2: Type: application/pgp-signature, Size: 198 bytes --]

  parent reply	other threads:[~2012-07-24  9:53 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-07-22 17:05 [PATCH 03/10] fdisk: API: add fdisk_label_change Davidlohr Bueso
2012-07-24  9:47 ` Bernhard Voelker
2012-07-24  9:56   ` Petr Uzel
2012-07-24 10:32     ` Bernhard Voelker
2012-07-24 10:39       ` Davidlohr Bueso
2012-07-24 10:42         ` Petr Uzel
2012-07-24 10:47           ` Bernhard Voelker
2012-07-24  9:52 ` Petr Uzel [this message]
2012-07-24 10:41   ` Davidlohr Bueso
2012-07-24 10:52     ` Petr Uzel
2012-07-24 11:35 ` Karel Zak

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=20120724095254.GC2086@foxbat.suse.cz \
    --to=petr.uzel@suse.cz \
    --cc=dave@gnu.org \
    --cc=util-linux@vger.kernel.org \
    /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.