uname: version string must hold 40 character value; strings returned by uname must always be NUL terminated

This commit is contained in:
Gregory Nutt 2015-07-05 06:46:00 -06:00
parent ffd0d12b04
commit 6576672e09
3 changed files with 34 additions and 11 deletions

@ -1 +1 @@
Subproject commit e51db57af106b97ff12b37f3779c1067c1a3cfb6
Subproject commit 011c54d78c920cd7bd0872638983444436e749dc

View file

@ -46,19 +46,29 @@
* Pre-processor Definitions
****************************************************************************/
#define SYS_NAMELEN 16
#define SYS_NAMELEN 16
#define VERSION_NAMELEN 41
/****************************************************************************
* Public Types
****************************************************************************/
/* These are the values returned by uname:
*
* FIELD Default
* sysname NuttX
* nodename CONFIG_NET_HOSTNAME
* release From version.h
* version From version.h
* machine CONFIG_ARCH
*/
struct utsname
{
char sysname[SYS_NAMELEN]; /* Name of OS */
char nodename[HOST_NAME_MAX]; /* Name of this network node */
char release[SYS_NAMELEN]; /* Release level */
char version[SYS_NAMELEN]; /* Version level */
char machine[SYS_NAMELEN]; /* Hardware type */
char sysname[SYS_NAMELEN]; /* Name of OS */
char nodename[HOST_NAME_MAX]; /* Name of this network node */
char release[SYS_NAMELEN]; /* Release level */
char version[VERSION_NAMELEN]; /* Version level */
char machine[SYS_NAMELEN]; /* Machine hardware */
};
/****************************************************************************

View file

@ -44,6 +44,10 @@
#include <nuttx/version.h>
/****************************************************************************
* Pre-processor Definitions
****************************************************************************/
/****************************************************************************
* Public Functions
****************************************************************************/
@ -80,6 +84,8 @@ int uname(FAR struct utsname *name)
{
int ret = 1;
/* Copy the strings. Assure that each is NUL terminated. */
strncpy(name->sysname, "NuttX", SYS_NAMELEN);
#ifdef CONFIG_NET
@ -90,13 +96,20 @@ int uname(FAR struct utsname *name)
ret = -1;
}
name->nodename[HOST_NAME_MAX-1] = '\0';
#else
strcpy(name->nodename, "");
strncpy(name->nodename, "", HOST_NAME_MAX);
#endif
strncpy(name->release, CONFIG_VERSION_STRING, SYS_NAMELEN);
strncpy(name->version, CONFIG_VERSION_BUILD, SYS_NAMELEN);
strncpy(name->machine, CONFIG_ARCH, SYS_NAMELEN);
strncpy(name->release, CONFIG_VERSION_STRING, SYS_NAMELEN);
name->release[SYS_NAMELEN-1] = '\0';
strncpy(name->version, CONFIG_VERSION_BUILD, VERSION_NAMELEN);
name->version[VERSION_NAMELEN-1] = '\0';
strncpy(name->machine, CONFIG_ARCH, SYS_NAMELEN);
name->machine[SYS_NAMELEN-1] = '\0';
return ret;
}