diff options
author | Richard W.M. Jones <rjones@redhat.com> | 2012-07-30 15:16:45 +0100 |
---|---|---|
committer | Richard W.M. Jones <rjones@redhat.com> | 2012-07-30 15:16:45 +0100 |
commit | b075b4d1feaaaa83272a8821828d9c7ce8843686 (patch) | |
tree | dcaff067f2a0dee741dc66b0d1935e1ed5d4e58f /daemon/utsname.c | |
parent | b61a8a50bc8d481df32f929046abf09383c8380e (diff) | |
download | libguestfs-b075b4d1feaaaa83272a8821828d9c7ce8843686.tar.gz libguestfs-b075b4d1feaaaa83272a8821828d9c7ce8843686.tar.xz libguestfs-b075b4d1feaaaa83272a8821828d9c7ce8843686.zip |
New API: utsname
Typical output:
><fs> utsname
uts_sysname: Linux
uts_release: 3.5.0-1.fc18.x86_64
uts_version: #1 SMP Mon Jul 23 17:43:39 UTC 2012
uts_machine: x86_64
Diffstat (limited to 'daemon/utsname.c')
-rw-r--r-- | daemon/utsname.c | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/daemon/utsname.c b/daemon/utsname.c new file mode 100644 index 00000000..dc492261 --- /dev/null +++ b/daemon/utsname.c @@ -0,0 +1,62 @@ +/* libguestfs - the guestfsd daemon + * Copyright (C) 2012 Red Hat Inc. + * + * 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 will 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 to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <sys/utsname.h> + +#include "guestfs_protocol.h" +#include "daemon.h" +#include "actions.h" + +guestfs_int_utsname * +do_utsname (void) +{ + struct utsname uts; + guestfs_int_utsname *ret; + + if (uname (&uts) == -1) { + reply_with_perror ("utsname"); + return NULL; + } + + ret = malloc (sizeof *ret); + if (ret == NULL) { + reply_with_perror ("malloc"); + return NULL; + } + + ret->uts_sysname = strdup (uts.sysname); + ret->uts_release = strdup (uts.release); + ret->uts_version = strdup (uts.version); + ret->uts_machine = strdup (uts.machine); + if (!ret->uts_sysname || !ret->uts_release || + !ret->uts_version || !ret->uts_machine) { + reply_with_perror ("strdup"); + free (ret->uts_sysname); + free (ret->uts_release); + free (ret->uts_version); + free (ret->uts_machine); + free (ret); + return NULL; + } + + return ret; +} |