Message ID | 20180605140624.7114-2-mylene.josserand@bootlin.com |
---|---|
State | Changes Requested |
Delegated to: | Petr Vorel |
Headers | show |
Series | Create new library helper: tst_getconf | expand |
Mylène Josserand <mylene.josserand@bootlin.com> wrote: > In some system, "getconf" application may not be installed. > Some tests are using it to retrieve some variables such as the > page size (PAGESIZE). > > Create a tst_getconf binary that use sysconf() function to retrieve > these variables instead of relying on "getconf" application that > may not be available. > Add also this new helper in the documentation. > > Example: > pagesize=`tst_getconf PAGESIZE` > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> > [...] > + > +#include <stdio.h> > +#include <unistd.h> > +#include <string.h> > + > +static void print_help(void) > +{ > + printf("Usage: tst_getconf variable\n\n"); > + printf(" variable: can be PAGESIZE or _NPROCESSORS_ONLN (for > the moment)\n"); > + printf("example: tst_getconf PAGESIZE\n"); > +} > + > +int main(int argc, char *argv[]) > +{ > + int opt; > + > + while ((opt = getopt(argc, argv, ":h")) != -1) { > + switch (opt) { > + case 'h': > + print_help(); > + return 0; > + default: > + print_help(); > + return 1; > + } > + } > What about set argc limitation here? if (argc != 2) { print_help(); return 1; } > + > + if (optind >= argc) { > + fprintf(stderr, "ERROR: Expected variable argument\n\n"); > + print_help(); > + return 1; > + } > + > + if (!strcmp(argv[optind], "_NPROCESSORS_ONLN")) > + printf("%ld", sysconf(_SC_NPROCESSORS_ONLN)); > + else if (!strcmp(argv[optind],"PAGESIZE")) > + printf("%ld", sysconf(_SC_PAGE_SIZE)); > We'd better add a default check for invalid parameter here, assume that if someone gives a typo in use this tst_getconf, it's not easy to find the error. # ./tst_getconf _NPROCESSORS_ONL <--- typo here # echo $? 0 > + > + return 0; > +} > -- > 2.11.0 > > > -- > Mailing list info: https://lists.linux.it/listinfo/ltp >
Hello, On Wed, 6 Jun 2018 12:11:25 +0800 Li Wang <liwang@redhat.com> wrote: > Mylène Josserand <mylene.josserand@bootlin.com> wrote: > > > In some system, "getconf" application may not be installed. > > Some tests are using it to retrieve some variables such as the > > page size (PAGESIZE). > > > > Create a tst_getconf binary that use sysconf() function to retrieve > > these variables instead of relying on "getconf" application that > > may not be available. > > Add also this new helper in the documentation. > > > > Example: > > pagesize=`tst_getconf PAGESIZE` > > > > Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> > > [...] > > + > > +#include <stdio.h> > > +#include <unistd.h> > > +#include <string.h> > > + > > +static void print_help(void) > > +{ > > + printf("Usage: tst_getconf variable\n\n"); > > + printf(" variable: can be PAGESIZE or _NPROCESSORS_ONLN (for > > the moment)\n"); > > + printf("example: tst_getconf PAGESIZE\n"); > > +} > > + > > +int main(int argc, char *argv[]) > > +{ > > + int opt; > > + > > + while ((opt = getopt(argc, argv, ":h")) != -1) { > > + switch (opt) { > > + case 'h': > > + print_help(); > > + return 0; > > + default: > > + print_help(); > > + return 1; > > + } > > + } > > > > What about set argc limitation here? > > if (argc != 2) { > print_help(); > return 1; > } > > Sure, I will add it in V2. > > > + > > + if (optind >= argc) { > > + fprintf(stderr, "ERROR: Expected variable argument\n\n"); > > + print_help(); > > + return 1; > > + } > > + > > + if (!strcmp(argv[optind], "_NPROCESSORS_ONLN")) > > + printf("%ld", sysconf(_SC_NPROCESSORS_ONLN)); > > + else if (!strcmp(argv[optind],"PAGESIZE")) > > + printf("%ld", sysconf(_SC_PAGE_SIZE)); > > > > We'd better add a default check for invalid parameter here, assume that if > someone gives > a typo in use this tst_getconf, it's not easy to find the error. > > # ./tst_getconf _NPROCESSORS_ONL <--- typo here > # echo $? > 0 > > Exact, thank you for the review. Best regards,
diff --git a/doc/test-writing-guidelines.txt b/doc/test-writing-guidelines.txt index fb7dcb591..e42451fae 100644 --- a/doc/test-writing-guidelines.txt +++ b/doc/test-writing-guidelines.txt @@ -1630,6 +1630,20 @@ passed directly to the script in '$1', '$2', ..., '$n'. 2.3.4 Usefull library functions ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Retrieving configuration variables +++++++++++++++++++++++++++++++++++ + +You may need to retrieve some variable configuration such as PAGESIZE. +There is "getconf" application that allows that but as some system may not +have it, a "tst_getconf" library allows to retrieve these variables by using +"sysconf()" function. + +[source,sh] +------------------------------------------------------------------------------- +# retrieve PAGESIZE +pagesize=`tst_getconf PAGESIZE` +------------------------------------------------------------------------------- + Sleeping for subsecond intervals ++++++++++++++++++++++++++++++++ diff --git a/testcases/lib/.gitignore b/testcases/lib/.gitignore index f36ed99fa..997940006 100644 --- a/testcases/lib/.gitignore +++ b/testcases/lib/.gitignore @@ -7,3 +7,4 @@ /tst_net_iface_prefix /tst_net_ip_prefix /tst_net_vars +/tst_getconf \ No newline at end of file diff --git a/testcases/lib/Makefile b/testcases/lib/Makefile index 398150ae0..77b7b2ef1 100644 --- a/testcases/lib/Makefile +++ b/testcases/lib/Makefile @@ -27,6 +27,7 @@ include $(top_srcdir)/include/mk/testcases.mk INSTALL_TARGETS := *.sh MAKE_TARGETS := tst_sleep tst_random tst_checkpoint tst_rod tst_kvcmp\ - tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars + tst_device tst_net_iface_prefix tst_net_ip_prefix tst_net_vars\ + tst_getconf include $(top_srcdir)/include/mk/generic_leaf_target.mk diff --git a/testcases/lib/tst_getconf.c b/testcases/lib/tst_getconf.c new file mode 100644 index 000000000..72abcc413 --- /dev/null +++ b/testcases/lib/tst_getconf.c @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2018 Mylène Josserand <mylene.josserand@bootlin.com> + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it would be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include <stdio.h> +#include <unistd.h> +#include <string.h> + +static void print_help(void) +{ + printf("Usage: tst_getconf variable\n\n"); + printf(" variable: can be PAGESIZE or _NPROCESSORS_ONLN (for the moment)\n"); + printf("example: tst_getconf PAGESIZE\n"); +} + +int main(int argc, char *argv[]) +{ + int opt; + + while ((opt = getopt(argc, argv, ":h")) != -1) { + switch (opt) { + case 'h': + print_help(); + return 0; + default: + print_help(); + return 1; + } + } + + if (optind >= argc) { + fprintf(stderr, "ERROR: Expected variable argument\n\n"); + print_help(); + return 1; + } + + if (!strcmp(argv[optind], "_NPROCESSORS_ONLN")) + printf("%ld", sysconf(_SC_NPROCESSORS_ONLN)); + else if (!strcmp(argv[optind],"PAGESIZE")) + printf("%ld", sysconf(_SC_PAGE_SIZE)); + + return 0; +}
In some system, "getconf" application may not be installed. Some tests are using it to retrieve some variables such as the page size (PAGESIZE). Create a tst_getconf binary that use sysconf() function to retrieve these variables instead of relying on "getconf" application that may not be available. Add also this new helper in the documentation. Example: pagesize=`tst_getconf PAGESIZE` Signed-off-by: Mylène Josserand <mylene.josserand@bootlin.com> --- doc/test-writing-guidelines.txt | 14 ++++++++++ testcases/lib/.gitignore | 1 + testcases/lib/Makefile | 3 ++- testcases/lib/tst_getconf.c | 57 +++++++++++++++++++++++++++++++++++++++++ 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 testcases/lib/tst_getconf.c