diff --git a/netutils/xmlrpc/xmlparser.c b/netutils/xmlrpc/xmlparser.c index 5db9c0ea6..ef5e89d01 100644 --- a/netutils/xmlrpc/xmlparser.c +++ b/netutils/xmlrpc/xmlparser.c @@ -125,7 +125,7 @@ static int xmlrpc_getelement(struct parsebuf_s * pbuf, char *data, int dataSize) int j = 0; int ret = XMLRPC_NO_ERROR; - while (!isprint(pbuf->buf[pbuf->index])) + while (pbuf->index < pbuf->len && !isprint(pbuf->buf[pbuf->index])) { pbuf->index++; } @@ -162,7 +162,9 @@ static int xmlrpc_getelement(struct parsebuf_s * pbuf, char *data, int dataSize) { data[j++] = pbuf->buf[pbuf->index++]; if (j >= dataSize) - ret = XMLRPC_PARSE_ERROR; + { + ret = XMLRPC_PARSE_ERROR; + } } } @@ -229,12 +231,15 @@ static int xmlrpc_parseparam(struct parsebuf_s * pbuf) case 'b': g_xmlcall.arguments[g_xmlcall.argsize].u.i = atoi(g_data); break; + case 'd': g_xmlcall.arguments[g_xmlcall.argsize].u.d = atof(g_data); break; + case 's': strcpy(g_xmlcall.arguments[g_xmlcall.argsize].u.string, g_data); break; + default: return XMLRPC_PARSE_ERROR; } diff --git a/nshlib/README.txt b/nshlib/README.txt index 1dcd760b7..cd545e100 100644 --- a/nshlib/README.txt +++ b/nshlib/README.txt @@ -590,6 +590,18 @@ o insmod NAME INIT UNINIT ARG TEXT SIZE DATA SIZE mydriver 20404659 20404625 0 20404580 552 204047a8 0 +o irqinfo + + Show the current count of interrupts taken on all attached interrupts. + + Example: + + nsh> irqinfo + IRQ HANDLER ARGUMENT COUNT RATE + 3 00001b3d 00000000 156 19.122 + 15 0000800d 00000000 817 100.000 + 30 00000fd5 20000018 20 2.490 + o kill - Send the to the task identified by . @@ -1325,6 +1337,7 @@ Command Dependencies on Configuration Settings ifdown CONFIG_NET && CONFIG_FS_PROCFS && !CONFIG_FS_PROCFS_EXCLUDE_NET ifup CONFIG_NET && CONFIG_FS_PROCFS && !CONFIG_FS_PROCFS_EXCLUDE_NET insmod CONFIG_MODULE + irqinfo CONFIG_FS_PROCFS && CONFIG_SCHED_IRQMONITOR kill !CONFIG_DISABLE_SIGNALS losetup !CONFIG_DISABLE_MOUNTPOINT && CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_DEV_LOOP ln CONFIG_NFILE_DESCRIPTORS > 0 && CONFIG_PSEUDOFS_SOFTLINK diff --git a/nshlib/nsh.h b/nshlib/nsh.h index c09313034..bf0b61f9d 100644 --- a/nshlib/nsh.h +++ b/nshlib/nsh.h @@ -658,10 +658,16 @@ # endif #endif +#undef HAVE_IRQINFO +#if !defined(CONFIG_DISABLE_MOUNTPOINT) && defined(CONFIG_FS_PROCFS) && \ + defined(CONFIG_SCHED_IRQMONITOR) +# define HAVE_IRQINFO 1 +#endif + #undef HAVE_MOUNT_LIST #if defined(CONFIG_FS_PROCFS) && !defined(CONFIG_NSH_DISABLE_MOUNT) && \ !defined(CONFIG_FS_PROCFS_EXCLUDE_MOUNT) -# define HAVE_MOUNT_LIST 1 +# define HAVE_MOUNT_LIST 1 #endif #if !defined(CONFIG_FS_PROCFS) || defined(CONFIG_FS_PROCFS_EXCLUDE_MEMINFO) @@ -684,13 +690,14 @@ # undef NSH_HAVE_TRIMDIR #endif -/* nsh_catfile used by cat, ifconfig, ifup/down, df, free, and mount (with +/* nsh_catfile used by cat, ifconfig, ifup/down, df, free, irqinfo, and mount (with * no arguments). */ #if !defined(CONFIG_NSH_DISABLE_CAT) && !defined(CONFIG_NSH_DISABLE_IFCONFIG) && \ !defined(CONFIG_NSH_DISABLE_IFUPDOWN) && !defined(CONFIG_NSH_DISABLE_DF) && \ - !defined(CONFIG_NSH_DISABLE_FREE) && !defined(HAVE_MOUNT_LIST) + !defined(CONFIG_NSH_DISABLE_FREE) && !defined(HAVE_IRQINFO) && \ + !defined(HAVE_MOUNT_LIST) # undef NSH_HAVE_CATFILE #endif @@ -1044,6 +1051,10 @@ int cmd_lsmod(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); #endif #endif +#ifdef HAVE_IRQINFO +int cmd_irqinfo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); +#endif + #if !defined(CONFIG_NSH_DISABLESCRIPT) && !defined(CONFIG_NSH_DISABLE_TEST) int cmd_test(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); int cmd_lbracket(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); diff --git a/nshlib/nsh_command.c b/nshlib/nsh_command.c index d9c6ae3c6..e3facaf58 100644 --- a/nshlib/nsh_command.c +++ b/nshlib/nsh_command.c @@ -192,14 +192,6 @@ static const struct cmdmap_s g_cmdmap[] = # endif #endif -#ifndef CONFIG_NSH_DISABLE_PRINTF -# ifndef CONFIG_DISABLE_ENVIRON - { "printf", cmd_printf, 1, CONFIG_NSH_MAXARGUMENTS, "[\\xNN] [\\n\\r\\t] [ [...]]" }, -# else - { "printf", cmd_printf, 1, CONFIG_NSH_MAXARGUMENTS, "[\\xNN] [\\n\\r\\t] [ [...]]" }, -# endif -#endif - #ifndef CONFIG_NSH_DISABLE_EXEC { "exec", cmd_exec, 2, 3, "" }, #endif @@ -245,13 +237,17 @@ static const struct cmdmap_s g_cmdmap[] = { "ifconfig", cmd_ifconfig, 1, 11, "[interface [|dhcp]] [dr|gw|gateway ] [netmask ] [dns ] [hw ]" }, # endif # ifndef CONFIG_NSH_DISABLE_IFUPDOWN - { "ifdown", cmd_ifdown, 2, 2, "" }, - { "ifup", cmd_ifup, 2, 2, "" }, + { "ifdown", cmd_ifdown, 2, 2, "" }, + { "ifup", cmd_ifup, 2, 2, "" }, # endif #endif #if defined(CONFIG_MODULE) && !defined(CONFIG_NSH_DISABLE_MODCMDS) - { "insmod", cmd_insmod, 3, 3, " " }, + { "insmod", cmd_insmod, 3, 3, " " }, +#endif + +#ifdef HAVE_IRQINFO + { "irqinfo", cmd_irqinfo, 1, 1, NULL }, #endif #ifndef CONFIG_DISABLE_SIGNALS @@ -385,6 +381,14 @@ static const struct cmdmap_s g_cmdmap[] = { "poweroff", cmd_poweroff, 1, 1, NULL }, #endif +#ifndef CONFIG_NSH_DISABLE_PRINTF +# ifndef CONFIG_DISABLE_ENVIRON + { "printf", cmd_printf, 1, CONFIG_NSH_MAXARGUMENTS, "[\\xNN] [\\n\\r\\t] [ [...]]" }, +# else + { "printf", cmd_printf, 1, CONFIG_NSH_MAXARGUMENTS, "[\\xNN] [\\n\\r\\t] [ [...]]" }, +# endif +#endif + #ifndef CONFIG_NSH_DISABLE_PS { "ps", cmd_ps, 1, 1, NULL }, #endif diff --git a/nshlib/nsh_dbgcmds.c b/nshlib/nsh_dbgcmds.c index cc67a2708..94930d357 100644 --- a/nshlib/nsh_dbgcmds.c +++ b/nshlib/nsh_dbgcmds.c @@ -1,7 +1,8 @@ /**************************************************************************** * apps/nshlib/dbg_dbgcmds.c * - * Copyright (C) 2008-2009, 2011-2012, 2015, 2017 Gregory Nutt. All rights reserved. + * Copyright (C) 2008-2009, 2011-2012, 2015, 2017-2018 Gregory Nutt. All + * rights reserved. * Author: Gregory Nutt * * Redistribution and use in source and binary forms, with or without @@ -500,3 +501,14 @@ int cmd_hexdump(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv) } #endif #endif + +/**************************************************************************** + * Name: cmd_irqinfo + ****************************************************************************/ + +#ifdef HAVE_IRQINFO +int cmd_irqinfo(FAR struct nsh_vtbl_s *vtbl, int argc, FAR char **argv) +{ + return nsh_catfile(vtbl, argv[0], CONFIG_NSH_PROC_MOUNTPOINT "/irqs"); +} +#endif