From: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
To: Maxime Ripard
<maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
Cc: "Pantelis Antoniou"
<pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org>,
"Simon Glass" <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>,
"Boris Brezillon"
<boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
"Alexander Kaplan" <alex-MflLfwwFzuz+yO7R74ARew@public.gmane.org>,
"Thomas Petazzoni"
<thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
"Antoine Ténart"
<antoine.tenart-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>,
"Stefan Agner" <stefan-XLVq0VzYD2Y@public.gmane.org>,
devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH v5 5/8] libfdt: Add fdt_setprop_inplace_namelen_partial
Date: Mon, 1 Aug 2016 13:36:42 +1000 [thread overview]
Message-ID: <20160801033642.GV2588@voom.fritz.box> (raw)
In-Reply-To: <20160729095551.13592-6-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
[-- Attachment #1: Type: text/plain, Size: 5276 bytes --]
On Fri, Jul 29, 2016 at 11:55:48AM +0200, Maxime Ripard wrote:
> Add a function to modify inplace only a portion of a property..
>
> This is especially useful when the property is an array of values, and you
> want to update one of them without changing the DT size.
>
> Acked-by: Simon Glass <sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org>
> Reviewed-by: David Gibson <david-xT8FGy+AXnRB3Ne2BGzF6laj5H9X9Tb+@public.gmane.org>
> Signed-off-by: Maxime Ripard <maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
Applied, though I made a couple of tiny tweaks, see below.
> ---
> libfdt/fdt_wip.c | 29 +++++++++++++++++++++++++----
> libfdt/libfdt.h | 21 +++++++++++++++++++++
> tests/setprop_inplace.c | 10 ++++++++++
> tests/testdata.h | 3 +++
> 4 files changed, 59 insertions(+), 4 deletions(-)
>
> diff --git a/libfdt/fdt_wip.c b/libfdt/fdt_wip.c
> index c5bbb68d3273..a6e158d1889a 100644
> --- a/libfdt/fdt_wip.c
> +++ b/libfdt/fdt_wip.c
> @@ -55,21 +55,42 @@
>
> #include "libfdt_internal.h"
>
> +int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
> + const char *name, int namelen,
> + uint32_t idx, const void *val,
> + int len)
> +{
> + void *propval;
> + int proplen;
> +
> + propval = fdt_getprop_namelen_w(fdt, nodeoffset, name, namelen,
> + &proplen);
> + if (!propval)
> + return proplen;
> +
> + if (proplen < (len + idx))
> + return -FDT_ERR_NOSPACE;
> +
> + memcpy((unsigned char *)propval + idx, val, len);
The unsigned qualifier is not necessary, so I removed it.
> + return 0;
> +}
> +
> int fdt_setprop_inplace(void *fdt, int nodeoffset, const char *name,
> const void *val, int len)
> {
> - void *propval;
> + const void *propval;
> int proplen;
>
> - propval = fdt_getprop_w(fdt, nodeoffset, name, &proplen);
> + propval = fdt_getprop(fdt, nodeoffset, name, &proplen);
> if (! propval)
> return proplen;
>
> if (proplen != len)
> return -FDT_ERR_NOSPACE;
>
> - memcpy(propval, val, len);
> - return 0;
> + return fdt_setprop_inplace_namelen_partial(fdt, nodeoffset, name,
> + strlen(name), 0,
> + val, len);
> }
>
> static void _fdt_nop_region(void *start, int len)
> diff --git a/libfdt/libfdt.h b/libfdt/libfdt.h
> index 0189350fb32f..e534a34355a4 100644
> --- a/libfdt/libfdt.h
> +++ b/libfdt/libfdt.h
> @@ -1079,6 +1079,27 @@ int fdt_size_cells(const void *fdt, int nodeoffset);
> /* Write-in-place functions */
> /**********************************************************************/
>
> +/**
> + * fdt_setprop_inplace_namelen_partial - change a property's value,
> + * but not its size
> + * @fdt: pointer to the device tree blob
> + * @nodeoffset: offset of the node whose property to change
> + * @name: name of the property to change
> + * @namelen: number of characters of name to consider
> + * @index: index of the property to change in the array
I changed this comment to match the new function signature.
> + * @val: pointer to data to replace the property value with
> + * @len: length of the property value
> + *
> + * Identical to fdt_setprop_inplace(), but modifies the given property
> + * starting from the given index, and using only the first characters
> + * of the name. It is useful when you want to manipulate only one value of
> + * an array and you have a string that doesn't end with \0.
> + */
> +int fdt_setprop_inplace_namelen_partial(void *fdt, int nodeoffset,
> + const char *name, int namelen,
> + uint32_t idx, const void *val,
> + int len);
> +
> /**
> * fdt_setprop_inplace - change a property's value, but not its size
> * @fdt: pointer to the device tree blob
> diff --git a/tests/setprop_inplace.c b/tests/setprop_inplace.c
> index daef182d0b28..80447a0b13ab 100644
> --- a/tests/setprop_inplace.c
> +++ b/tests/setprop_inplace.c
> @@ -83,5 +83,15 @@ int main(int argc, char *argv[])
> strp = check_getprop(fdt, 0, "prop-str", xlen+1, xstr);
> verbose_printf("New string value is \"%s\"\n", strp);
>
> + err = fdt_setprop_inplace_namelen_partial(fdt, 0, "compatible",
> + strlen("compatible"), 4,
> + TEST_STRING_4_PARTIAL,
> + strlen(TEST_STRING_4_PARTIAL));
> + if (err)
> + FAIL("Failed to set \"compatible\": %s\n", fdt_strerror(err));
> +
> + check_getprop(fdt, 0, "compatible", strlen(TEST_STRING_4_RESULT) + 1,
> + TEST_STRING_4_RESULT);
> +
> PASS();
> }
> diff --git a/tests/testdata.h b/tests/testdata.h
> index 576974dddee8..3588778ad159 100644
> --- a/tests/testdata.h
> +++ b/tests/testdata.h
> @@ -21,6 +21,9 @@
> #define TEST_STRING_2 "nastystring: \a\b\t\n\v\f\r\\\""
> #define TEST_STRING_3 "\xde\xad\xbe\xef"
>
> +#define TEST_STRING_4_PARTIAL "foobar"
> +#define TEST_STRING_4_RESULT "testfoobar"
> +
> #define TEST_CHAR1 '\r'
> #define TEST_CHAR2 'b'
> #define TEST_CHAR3 '\0'
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-08-01 3:36 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-29 9:55 [PATCH v5 0/8] libfdt: Add support for device tree overlays Maxime Ripard
[not found] ` <20160729095551.13592-1-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2016-07-29 9:55 ` [PATCH v5 1/8] libfdt: Add a subnodes iterator macro Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 2/8] libfdt: Add iterator over properties Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 3/8] libfdt: Add max phandle retrieval function Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 4/8] libfdt: Add fdt_getprop_namelen_w Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 5/8] libfdt: Add fdt_setprop_inplace_namelen_partial Maxime Ripard
[not found] ` <20160729095551.13592-6-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2016-08-01 3:36 ` David Gibson [this message]
[not found] ` <20160801033642.GV2588-RXTfZT5YzpxwFLYp8hBm2A@public.gmane.org>
2016-08-22 10:07 ` Maxime Ripard
2016-08-22 13:01 ` David Gibson
2016-08-24 6:44 ` Maxime Ripard
2016-09-22 6:39 ` Maxime Ripard
2016-09-23 5:31 ` David Gibson
[not found] ` <20160923053120.GY2085-K0bRW+63XPQe6aEkudXLsA@public.gmane.org>
2016-09-23 12:02 ` Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 6/8] libfdt: Introduce FDT_ERR_BADFIXUP Maxime Ripard
2016-07-29 9:55 ` [PATCH v5 7/8] libfdt: Add overlay application function Maxime Ripard
[not found] ` <20160729095551.13592-8-maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org>
2016-09-23 5:31 ` David Gibson
2016-07-29 9:55 ` [PATCH v5 8/8] tests: Add tests cases for the overlay code Maxime Ripard
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=20160801033642.GV2588@voom.fritz.box \
--to=david-xt8fgy+axnrb3ne2bgzf6laj5h9x9tb+@public.gmane.org \
--cc=alex-MflLfwwFzuz+yO7R74ARew@public.gmane.org \
--cc=antoine.tenart-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=boris.brezillon-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=devicetree-compiler-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=devicetree-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
--cc=maxime.ripard-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.org \
--cc=pantelis.antoniou-OWPKS81ov/FWk0Htik3J/w@public.gmane.org \
--cc=sjg-F7+t8E8rja9g9hUCZPvPmw@public.gmane.org \
--cc=stefan-XLVq0VzYD2Y@public.gmane.org \
--cc=thomas.petazzoni-wi1+55ScJUtKEb57/3fJTNBPR1lH4CV8@public.gmane.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.