diff options
Diffstat (limited to 'c/src/libnetworking/rtems/sghostname.c')
-rw-r--r-- | c/src/libnetworking/rtems/sghostname.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/c/src/libnetworking/rtems/sghostname.c b/c/src/libnetworking/rtems/sghostname.c new file mode 100644 index 0000000000..ec9753649b --- /dev/null +++ b/c/src/libnetworking/rtems/sghostname.c @@ -0,0 +1,47 @@ +/* + * RTEMS versions of hostname functions + * FIXME: Not thread-safe + */ + +#include <string.h> +#include <errno.h> +#include <rtems/rtems_bsdnet.h> +#include <sys/param.h> +#include <sys/malloc.h> +#include <sys/kernel.h> + +static char *rtems_hostname; + +int +gethostname (char *name, int namelen) +{ + char *cp = rtems_hostname; + + if (cp == NULL) + cp = ""; + strncpy (name, cp, namelen); + return 0; +} + +int +sethostname (char *name, int namelen) +{ + char *old, *new; + + if (namelen >= MAXHOSTNAMELEN) { + errno = EINVAL; + return -1; + } + new = malloc (namelen + 1, M_HTABLE, M_NOWAIT); + if (new == NULL) { + errno = ENOMEM; + return -1; + } + strncpy (new, name, namelen); + new[namelen] = '\0'; + old = rtems_hostname; + rtems_hostname = new; + if (old) + free (old, M_HTABLE); + return 0; +} |