[Xenomai-git] Philippe Gerum : copperplate/init: disambiguate --mem-pool-size argument

2015-08-15 Thread git repository hosting
Module: xenomai-3
Branch: master
Commit: b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Aug 13 17:07:42 2015 +0200

copperplate/init: disambiguate --mem-pool-size argument

The value passed to --mem-pool-size used to represent kilobytes, which
is at odds with the byte unit required by the mem_pool_size tunable.

--mem-pool-size now accepts a unit K|M|G suffix to values, defaulting
to bytes. For backward compatibility, any non-suffixed value below
65536 is interpreted as a count of kilobytes, not bytes,
e.g. --mem-pool-size=8192 will create a 8M heap for the
application. This conversion is noisy, to call for a parameter update
asap, unless --no-sanity is in effect.

If you need a tiny heap size below 64k, pass a kilobyte value with a 'K'
suffix.

---

 lib/copperplate/init.c |   20 ++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
index c84d8a2..d24673d 100644
--- a/lib/copperplate/init.c
+++ b/lib/copperplate/init.c
@@ -21,6 +21,7 @@
 #include stdlib.h
 #include unistd.h
 #include string.h
+#include ctype.h
 #include pwd.h
 #include errno.h
 #include getopt.h
@@ -193,9 +194,24 @@ static int copperplate_init(void)
 
 static int copperplate_parse_option(int optnum, const char *optarg)
 {
+   size_t memsz;
+
switch (optnum) {
case mempool_opt:
-   __copperplate_setup_data.mem_pool = atoi(optarg) * 1024;
+   memsz = get_mem_size(optarg);
+   if (memsz == 0)
+   return -EINVAL;
+   /*
+* Emulate former sloppy syntax: values below 64k are
+* likely to represent kilobytes, not bytes.
+*/
+   if (isdigit(optarg[strlen(optarg)-1]) 
+   memsz  64 * 1024) {
+   memsz *= 1024;
+   if (__base_setup_data.no_sanity == 0)
+   warning(--mem-pool-size=size[K|M|G], using 
%Zu bytes, memsz);
+   }
+   __copperplate_setup_data.mem_pool = memsz;
break;
case session_opt:
__copperplate_setup_data.session_label = strdup(optarg);
@@ -216,7 +232,7 @@ static int copperplate_parse_option(int optnum, const char 
*optarg)
 
 static void copperplate_help(void)
 {
-   fprintf(stderr, --mem-pool-size=sizeKsize of the main heap 
(kbytes)\n);
+   fprintf(stderr, --mem-pool-size=size[K|M|G]  size of the main 
heap\n);
 fprintf(stderr, --no-registry suppress object 
registration\n);
 fprintf(stderr, --shared-registry enable public access to 
registry\n);
 fprintf(stderr, --registry-root=pathroot path of 
registry\n);


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://xenomai.org/mailman/listinfo/xenomai-git


[Xenomai-git] Philippe Gerum : copperplate/init: disambiguate --mem-pool-size argument

2015-08-13 Thread git repository hosting
Module: xenomai-3
Branch: next
Commit: b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2
URL:
http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=b151d3ba663ec5abd008ff2f3f4ce6b3ce9d02b2

Author: Philippe Gerum r...@xenomai.org
Date:   Thu Aug 13 17:07:42 2015 +0200

copperplate/init: disambiguate --mem-pool-size argument

The value passed to --mem-pool-size used to represent kilobytes, which
is at odds with the byte unit required by the mem_pool_size tunable.

--mem-pool-size now accepts a unit K|M|G suffix to values, defaulting
to bytes. For backward compatibility, any non-suffixed value below
65536 is interpreted as a count of kilobytes, not bytes,
e.g. --mem-pool-size=8192 will create a 8M heap for the
application. This conversion is noisy, to call for a parameter update
asap, unless --no-sanity is in effect.

If you need a tiny heap size below 64k, pass a kilobyte value with a 'K'
suffix.

---

 lib/copperplate/init.c |   20 ++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/lib/copperplate/init.c b/lib/copperplate/init.c
index c84d8a2..d24673d 100644
--- a/lib/copperplate/init.c
+++ b/lib/copperplate/init.c
@@ -21,6 +21,7 @@
 #include stdlib.h
 #include unistd.h
 #include string.h
+#include ctype.h
 #include pwd.h
 #include errno.h
 #include getopt.h
@@ -193,9 +194,24 @@ static int copperplate_init(void)
 
 static int copperplate_parse_option(int optnum, const char *optarg)
 {
+   size_t memsz;
+
switch (optnum) {
case mempool_opt:
-   __copperplate_setup_data.mem_pool = atoi(optarg) * 1024;
+   memsz = get_mem_size(optarg);
+   if (memsz == 0)
+   return -EINVAL;
+   /*
+* Emulate former sloppy syntax: values below 64k are
+* likely to represent kilobytes, not bytes.
+*/
+   if (isdigit(optarg[strlen(optarg)-1]) 
+   memsz  64 * 1024) {
+   memsz *= 1024;
+   if (__base_setup_data.no_sanity == 0)
+   warning(--mem-pool-size=size[K|M|G], using 
%Zu bytes, memsz);
+   }
+   __copperplate_setup_data.mem_pool = memsz;
break;
case session_opt:
__copperplate_setup_data.session_label = strdup(optarg);
@@ -216,7 +232,7 @@ static int copperplate_parse_option(int optnum, const char 
*optarg)
 
 static void copperplate_help(void)
 {
-   fprintf(stderr, --mem-pool-size=sizeKsize of the main heap 
(kbytes)\n);
+   fprintf(stderr, --mem-pool-size=size[K|M|G]  size of the main 
heap\n);
 fprintf(stderr, --no-registry suppress object 
registration\n);
 fprintf(stderr, --shared-registry enable public access to 
registry\n);
 fprintf(stderr, --registry-root=pathroot path of 
registry\n);


___
Xenomai-git mailing list
Xenomai-git@xenomai.org
http://xenomai.org/mailman/listinfo/xenomai-git