[Xenomai-git] Philippe Gerum : copperplate/init: disambiguate --mem-pool-size argument
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
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