Skip to contentSkip to conversation

fw_env: fix type of len

PATCH New Mike Frysinger 6 participants 12 messages Nov 11, 2012 – May 21, 2013

lore
Share & tools
lore
#0 lore raw

PATCH 1/3 fw_env: fix type of len

This variable is assigned by a size_t, and is printed that way, but is incorrectly declared as an int. Which means we get warnings:
fw_env.c: In function 'fw_setenv':
fw_env.c:409:5: warning: format '%zu' expects argument of type 'size_t',
but argument 3 has type 'int' [-Wformat]

---
 tools/env/fw_env.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
tools/env/fw_env.c +2 -1
index 9b023e8..02f97c0 100644
@@ -379,7 +379,8 @@ int fw_env_write(char *name, char *value)
  */
 int fw_setenv(int argc, char *argv[])
 {
-	int i, len;
+	int i;
+	size_t len;
 	char *name;
 	char *value = NULL;
 
Signature · 1 line
1.7.12.4
#1 lore raw

PATCH 2/3 fw_env: fix incorrect usage of open(O_CREAT)

When using open(), the O_CREAT flag must be given a mode, otherwise it uses random garbage from the stack. Also, it can fail to build:

In file included from /usr/include/fcntl.h:290:0,

                 from fw_env_main.c:42:
In function 'open',
    inlined from 'main' at fw_env_main.c:97:9:

/usr/include/bits/fcntl2.h:50:24: error: call to '__open_missing_mode' declared
with attribute error: open with O_CREAT in second argument needs 3 arguments

---
 tools/env/fw_env_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/env/fw_env_main.c +1 -1
index c855f4c..40ea3f6 100644
@@ -94,7 +94,7 @@ int main(int argc, char *argv[])
 	int lockfd = -1;
 	int retval = EXIT_SUCCESS;
 
-	lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC);
+	lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
 	if (-1 == lockfd) {
 		fprintf(stderr, "Error opening lock file %s\n", lockname);
 		return EXIT_FAILURE;
Signature · 1 line
1.7.12.4
#2 lore raw

PATCH 2/3 fw_env: fix incorrect usage of open(O_CREAT)

Hi,

Quoted 9 lines · Mike Frysinger

When using open(), the O_CREAT flag must be given a mode, otherwise it uses random garbage from the stack. Also, it can fail to build:

In file included from /usr/include/fcntl.h:290:0,

                 from fw_env_main.c:42:
In function 'open',
    inlined from 'main' at fw_env_main.c:97:9:

/usr/include/bits/fcntl2.h:50:24: error: call to '__open_missing_mode' declared
with attribute error: open with O_CREAT in second argument needs 3 arguments

Could someone please pick up this patchset?

http://patchwork.ozlabs.org/patch/198241/
http://patchwork.ozlabs.org/patch/198243/
http://patchwork.ozlabs.org/patch/198242/

make env is currently broken for me.
Thank you!
Regards, Christian

Quoted 26 lines
---
 tools/env/fw_env_main.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
tools/env/fw_env_main.c +1 -2
index c855f4c..40ea3f6 100644
@@ -94,7 +94,7 @@ int main(int argc, char *argv[])
        int lockfd = -1;
        int retval = EXIT_SUCCESS;
 
-       lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC);
+       lockfd = open(lockname, O_WRONLY | O_CREAT | O_TRUNC, 0666);
        if (-1 == lockfd) {
                fprintf(stderr, "Error opening lock file %s\n", lockname);
                return EXIT_FAILURE;
--

1.7.12.4

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

#3 lore raw

PATCH 2/3 fw_env: fix incorrect usage of open(O_CREAT)

In reply to Mike Frysinger

Hi Mike,

Quoted 11 lines · Mike Frysinger

When using open(), the O_CREAT flag must be given a mode, otherwise it uses random garbage from the stack. Also, it can fail to build:

In file included from /usr/include/fcntl.h:290:0,

                 from fw_env_main.c:42:
In function 'open',
    inlined from 'main' at fw_env_main.c:97:9:

/usr/include/bits/fcntl2.h:50:24: error: call to '__open_missing_mode' declared
with attribute error: open with O_CREAT in second argument needs 3 arguments

#4 lore raw

PATCH 3/3 fw_env: fix building w/out a config.h

In reply to Mike Frysinger
---
 tools/env/Makefile | 11 ++++++++++-
 tools/env/fw_env.h | 25 -------------------------
 2 files changed, 10 insertions(+), 26 deletions(-)
tools/env/Makefile +10 -1
index ab73c8c..62a113a 100644
@@ -24,7 +24,7 @@
 include $(TOPDIR)/config.mk
 
 HOSTSRCS := $(SRCTREE)/lib/crc32.c  fw_env.c  fw_env_main.c
-HEADERS	:= fw_env.h $(OBJTREE)/include/config.h
+HEADERS	:= fw_env.h
 
 # Compile for a hosted environment on the target
 HOSTCPPFLAGS  = -idirafter $(SRCTREE)/include \
@@ -33,6 +33,15 @@ HOSTCPPFLAGS  = -idirafter $(SRCTREE)/include \
 		-DUSE_HOSTCC \
 		-DTEXT_BASE=$(TEXT_BASE)
 
+# Pass CONFIG_xxx settings via the command line so that we can build w/out
+# a config.h file existing in the first place.  Useful for generic builds.
+CONFIG_VARS_TO_PASS = \
+	ENV_OVERWRITE \
+	OVERWRITE_ETHADDR_ONCE \
+	ETHADDR
+HOSTCPPFLAGS += \
+	$(foreach x,$(CONFIG_VARS_TO_PASS),$(if $(CONFIG_$(x)),-DCONFIG_$(x)=$(CONFIG_$(x))))
+
 ifeq ($(MTD_VERSION),old)
 HOSTCPPFLAGS += -DMTD_OLD
 endif
tools/env/fw_env.h +0 -25
index a1a6807..19703c7 100644
@@ -21,15 +21,6 @@
  * MA 02111-1307 USA
  */
 
-/* Pull in the current config to define the default environment */
-#ifndef __ASSEMBLY__
-#define __ASSEMBLY__ /* get only #defines from config.h */
-#include <config.h>
-#undef	__ASSEMBLY__
-#else
-#include <config.h>
-#endif
-
 /*
  * To build the utility with the static configuration
  * comment out the next line.
@@ -52,22 +43,6 @@
 #define DEVICE2_ENVSECTORS     2
 #endif
 
-#ifndef CONFIG_BAUDRATE
-#define CONFIG_BAUDRATE		115200
-#endif
-
-#ifndef CONFIG_BOOTDELAY
-#define CONFIG_BOOTDELAY	5	/* autoboot after 5 seconds	*/
-#endif
-
-#ifndef CONFIG_BOOTCOMMAND
-#define CONFIG_BOOTCOMMAND							\
-	"bootp; "								\
-	"setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "	\
-	"ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "	\
-	"bootm"
-#endif
-
 extern int   fw_printenv(int argc, char *argv[]);
 extern char *fw_getenv  (char *name);
 extern int fw_setenv  (int argc, char *argv[]);
Signature · 1 line
1.7.12.4
#6 lore raw

PATCH 3/3 fw_env: fix building w/out a config.h

In reply to Mike Frysinger

Hi Mike

Quoted 11 lines · Mike Frysinger
---
 tools/env/Makefile | 11 ++++++++++-
 tools/env/fw_env.h | 25 -------------------------
 2 files changed, 10 insertions(+), 26 deletions(-)
tools/env/Makefile +0 -0
index ab73c8c..62a113a 100644

tools/env/Makefile line 27

Quoted 5 lines
tools/env/Makefile +1 -1
@@ -24,7 +24,7 @@
 include $(TOPDIR)/config.mk
 
 HOSTSRCS := $(SRCTREE)/lib/crc32.c  fw_env.c  fw_env_main.c
-HEADERS        := fw_env.h $(OBJTREE)/include/config.h
+HEADERS        := fw_env.h

I think this is the wrong approach. We depend on the config.h being included and the entire default env being available. If you want to get this behavior, I suggest you detect if there is a configured board, and if so, include the config.h, and if not, bake in the bit you need to cope with not having one.

tools/env/Makefile HOSTCPPFLAGS = -idirafter $(SRCTREE)/include \ · line 41

Quoted 12 lines
tools/env/Makefile +6 -0
 # Compile for a hosted environment on the target
 HOSTCPPFLAGS  = -idirafter $(SRCTREE)/include \
@@ -33,6 +33,15 @@ HOSTCPPFLAGS  = -idirafter $(SRCTREE)/include \
                -DUSE_HOSTCC \
                -DTEXT_BASE=$(TEXT_BASE)
 
+# Pass CONFIG_xxx settings via the command line so that we can build w/out
+# a config.h file existing in the first place.  Useful for generic builds.
+CONFIG_VARS_TO_PASS = \
+       ENV_OVERWRITE \
+       OVERWRITE_ETHADDR_ONCE \
+       ETHADDR

This doesn't look very maintainable, and it doesn't even include the variables currently used.

Quoted 36 lines
tools/env/Makefile +3 -0
+HOSTCPPFLAGS += \
+       $(foreach x,$(CONFIG_VARS_TO_PASS),$(if $(CONFIG_$(x)),-DCONFIG_$(x)=$(CONFIG_$(x))))
+
 ifeq ($(MTD_VERSION),old)
 HOSTCPPFLAGS += -DMTD_OLD
 endif
tools/env/fw_env.h +0 -15
index a1a6807..19703c7 100644
@@ -21,15 +21,6 @@
  * MA 02111-1307 USA
  */
 
-/* Pull in the current config to define the default environment */
-#ifndef __ASSEMBLY__
-#define __ASSEMBLY__ /* get only #defines from config.h */
-#include <config.h>
-#undef __ASSEMBLY__
-#else
-#include <config.h>
-#endif
-
 /*
  * To build the utility with the static configuration
  * comment out the next line.
@@ -52,22 +43,6 @@
 #define DEVICE2_ENVSECTORS     2
 #endif
 
-#ifndef CONFIG_BAUDRATE
-#define CONFIG_BAUDRATE                115200
-#endif
-
-#ifndef CONFIG_BOOTDELAY
-#define CONFIG_BOOTDELAY       5       /* autoboot after 5 seconds     */

tools/env/fw_env.h line 70

Quoted 10 lines
tools/env/fw_env.h +0 -10
-#endif
-
-#ifndef CONFIG_BOOTCOMMAND
-#define CONFIG_BOOTCOMMAND                                                     \
-       "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "        \
-       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
-       "bootm"
-#endif
-

I agree that some of this should be cleaned up, but not as a result of removing the config.h.

Quoted 10 lines
tools/env/fw_env.h +0 -1
 extern int   fw_printenv(int argc, char *argv[]);
 extern char *fw_getenv  (char *name);
 extern int fw_setenv  (int argc, char *argv[]);
--

1.7.12.4

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

NAK

Thanks,
-Joe

#7 lore raw

PATCH 3/3 fw_env: fix building w/out a config.h

On 12/15/2012 07:04 PM, Joe Hershberger wrote:

<big snip>

Quoted 18 lines

tools/env/fw_env.h line 70

Quoted 8 lines
tools/env/fw_env.h +0 -8
-#ifndef CONFIG_BOOTCOMMAND
-#define CONFIG_BOOTCOMMAND                                                     \
-       "bootp; "                                                               \
-       "setenv bootargs root=/dev/nfs nfsroot=${serverip}:${rootpath} "        \
-       "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}:${hostname}::off; "   \
-       "bootm"
-#endif
-

I agree that some of this should be cleaned up, but not as a result of removing the config.h.

Quoted 6 lines

extern int fw_printenv(int argc, char *argv[]);
extern char *fw_getenv (char *name);
extern int fw_setenv (int argc, char *argv[]);
--
1.7.12.4

Quoted 6 lines
Quoted 4 lines

_______________________________________________
U-Boot mailing list
U-Boot at lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

NAK

Mike, any chance that you might find some time to rework this patch for mainline acceptance?

BTW: I'm using this patch for Yocto builds of the Linux environment tools. Without it, building fails.

Thanks,
Stefan

#8 lore raw

PATCH 1/3 fw_env: fix type of len

In reply to Mike Frysinger

Hi Mike,

Quoted 8 lines · Mike Frysinger

This variable is assigned by a size_t, and is printed that way, but is incorrectly declared as an int. Which means we get warnings:
fw_env.c: In function 'fw_setenv':
fw_env.c:409:5: warning: format '%zu' expects argument of type 'size_t',
but argument 3 has type 'int' [-Wformat]

---

#9 lore raw

PATCH 1/3 fw_env: fix type of len

In reply to Mike Frysinger
Quoted 8 lines · Mike Frysinger

This variable is assigned by a size_t, and is printed that way, but is incorrectly declared as an int. Which means we get warnings:
fw_env.c: In function 'fw_setenv':
fw_env.c:409:5: warning: format '%zu' expects argument of type 'size_t',
but argument 3 has type 'int' [-Wformat]

For the series, applied to u-boot/master, thanks!

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20121219/3843ecee/attachment.pgp>
#10 lore raw

PATCH 1/3 fw_env: fix type of len

Hi Tom,

Quoted 8 lines · Tom Rini
Quoted 6 lines · Mike Frysinger

This variable is assigned by a size_t, and is printed that way, but is incorrectly declared as an int. Which means we get warnings:
fw_env.c: In function 'fw_setenv':
fw_env.c:409:5: warning: format '%zu' expects argument of type 'size_t',
but argument 3 has type 'int' [-Wformat]

Quoted 4 lines
Quoted 2 lines

For the series, applied to u-boot/master, thanks!

I NACKed the third in this series. Did you not see it?

-Joe

#11 lore raw

PATCH 1/3 fw_env: fix type of len

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Quoted 11 lines · Joe Hershberger

Hi Tom,

Quoted 8 lines · Tom Rini
Quoted 6 lines · Mike Frysinger

This variable is assigned by a size_t, and is printed that way, but is incorrectly declared as an int. Which means we get
warnings: fw_env.c: In function 'fw_setenv': fw_env.c:409:5:
warning: format '%zu' expects argument of type 'size_t', but argument 3 has type 'int' [-Wformat]

Quoted 6 lines
Quoted 4 lines
Quoted 2 lines

Hershberger <[email protected]>

For the series, applied to u-boot/master, thanks!

I NACKed the third in this series. Did you not see it?

Yeah, I missed that, sorry.

- --
Tom
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://www.enigmail.net/

iQIcBAEBAgAGBQJQ0x/nAAoJENk4IS6UOR1WJ+IP/2g/Gb25k5WwKLG9LJWGp+ve h173Xt1GhMWB8tutmEd1zc4Gat/ZhFv8PO6SxlR/3RxTZzNkg7v74SBkNnglHQVa cvYIgzb72QvpIl7gHITHA38XedcV0UjEIJmlV6alqbZ/z4XBlNr/5Z71lwmI6VdM H+yopRxmxXAtthTHNfyTyF6+MVItlCY15RkKFTvv93Pof1CRtRLI1jL5+497VtbS hi7Fao2N/bHBUVkjQDU3hKOyApTNJhMBgxPu9EZszeAYqNLCNMH6FT4HvUNkYIjT OEyG8bfm5D+v4x79fmLuLwPRg+yaBKu4nVJe7pzeTsQKfM3loIvyoaci2DLm9afS ybmf97tRafMBYYiOTGJoRH3LXubCs1NZNgQIwCcDC9q59qy1E+uxp2jhBx/xfqGF ixlz3A+J0c9Ahfjybejf9Y1M3I/3Sbyx6/fJR7jZsQo/lJROkp4W+yJHcmSzLqQO jufYVZNi5lYo73R11TUa2oXngoBNW7jY4A9JHSA06JoB+GHp8Ze6yTFZD0QviTkY oAWNHMvTFqzvC4UAHLXOGiiBTuxVaCd8nOR2/z/BzcKEHJuTTJxwe0ABB/FU9o3b wF1MxwONT3/kfYA5eDItbjGaSa6NyY/66czjFSZjO0YJFZEKwKtLigwcgKw6Krq+ Mfv8c0WC0IXzgYikHFMm
=Fiob
-----END PGP SIGNATURE-----