Reviewed-by: Konstantin Kostiuk <kkost...@redhat.com> On Wed, Apr 20, 2022 at 4:30 PM <marcandre.lur...@redhat.com> wrote:
> From: Marc-André Lureau <marcandre.lur...@redhat.com> > > The function is specific to qemu-ga, no need to share it in QEMU. > > Signed-off-by: Marc-André Lureau <marcandre.lur...@redhat.com> > --- > include/qemu/osdep.h | 10 ---------- > qga/commands-common.h | 11 +++++++++++ > qga/commands-posix.c | 35 +++++++++++++++++++++++++++++++++++ > qga/commands-win32.c | 13 +++++++++++++ > qga/commands.c | 2 +- > util/oslib-posix.c | 35 ----------------------------------- > util/oslib-win32.c | 13 ------------- > 7 files changed, 60 insertions(+), 59 deletions(-) > > diff --git a/include/qemu/osdep.h b/include/qemu/osdep.h > index 9fd52d6a33a7..ccf10f05f806 100644 > --- a/include/qemu/osdep.h > +++ b/include/qemu/osdep.h > @@ -648,16 +648,6 @@ int qemu_fdatasync(int fd); > */ > int qemu_msync(void *addr, size_t length, int fd); > > -/** > - * qemu_get_host_name: > - * @errp: Error object > - * > - * Operating system agnostic way of querying host name. > - * > - * Returns allocated hostname (caller should free), NULL on failure. > - */ > -char *qemu_get_host_name(Error **errp); > - > /** > * qemu_get_host_physmem: > * > diff --git a/qga/commands-common.h b/qga/commands-common.h > index 90785ed4bb7b..d0e4a9696f37 100644 > --- a/qga/commands-common.h > +++ b/qga/commands-common.h > @@ -18,4 +18,15 @@ GuestFileHandle *guest_file_handle_find(int64_t id, > Error **errp); > GuestFileRead *guest_file_read_unsafe(GuestFileHandle *gfh, > int64_t count, Error **errp); > > +/** > + * qga_get_host_name: > + * @errp: Error object > + * > + * Operating system agnostic way of querying host name. > + * Compared to g_get_host_name(), it doesn't cache the result. > + * > + * Returns allocated hostname (caller should free), NULL on failure. > + */ > +char *qga_get_host_name(Error **errp); > + > #endif > diff --git a/qga/commands-posix.c b/qga/commands-posix.c > index 390c1560e1b5..77f4672ca2c9 100644 > --- a/qga/commands-posix.c > +++ b/qga/commands-posix.c > @@ -3278,3 +3278,38 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error > **errp) > > return NULL; > } > + > +#ifndef HOST_NAME_MAX > +# ifdef _POSIX_HOST_NAME_MAX > +# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX > +# else > +# define HOST_NAME_MAX 255 > +# endif > +#endif > + > +char *qga_get_host_name(Error **errp) > +{ > + long len = -1; > + g_autofree char *hostname = NULL; > + > +#ifdef _SC_HOST_NAME_MAX > + len = sysconf(_SC_HOST_NAME_MAX); > +#endif /* _SC_HOST_NAME_MAX */ > + > + if (len < 0) { > + len = HOST_NAME_MAX; > + } > + > + /* Unfortunately, gethostname() below does not guarantee a > + * NULL terminated string. Therefore, allocate one byte more > + * to be sure. */ > + hostname = g_new0(char, len + 1); > + > + if (gethostname(hostname, len) < 0) { > + error_setg_errno(errp, errno, > + "cannot get hostname"); > + return NULL; > + } > + > + return g_steal_pointer(&hostname); > +} > diff --git a/qga/commands-win32.c b/qga/commands-win32.c > index 406e4072a012..d56b5fd2a71c 100644 > --- a/qga/commands-win32.c > +++ b/qga/commands-win32.c > @@ -2519,3 +2519,16 @@ GuestDeviceInfoList *qmp_guest_get_devices(Error > **errp) > } > return head; > } > + > +char *qga_get_host_name(Error **errp) > +{ > + wchar_t tmp[MAX_COMPUTERNAME_LENGTH + 1]; > + DWORD size = G_N_ELEMENTS(tmp); > + > + if (GetComputerNameW(tmp, &size) == 0) { > + error_setg_win32(errp, GetLastError(), "failed close handle"); > + return NULL; > + } > + > + return g_utf16_to_utf8(tmp, size, NULL, NULL, NULL); > +} > diff --git a/qga/commands.c b/qga/commands.c > index 4e9ce25b2e73..690da0073d6e 100644 > --- a/qga/commands.c > +++ b/qga/commands.c > @@ -511,7 +511,7 @@ int ga_parse_whence(GuestFileWhence *whence, Error > **errp) > GuestHostName *qmp_guest_get_host_name(Error **errp) > { > GuestHostName *result = NULL; > - g_autofree char *hostname = qemu_get_host_name(errp); > + g_autofree char *hostname = qga_get_host_name(errp); > > /* > * We want to avoid using g_get_host_name() because that > diff --git a/util/oslib-posix.c b/util/oslib-posix.c > index 4f18cc612850..63d2c6a76a77 100644 > --- a/util/oslib-posix.c > +++ b/util/oslib-posix.c > @@ -805,41 +805,6 @@ void sigaction_invoke(struct sigaction *action, > action->sa_sigaction(info->ssi_signo, &si, NULL); > } > > -#ifndef HOST_NAME_MAX > -# ifdef _POSIX_HOST_NAME_MAX > -# define HOST_NAME_MAX _POSIX_HOST_NAME_MAX > -# else > -# define HOST_NAME_MAX 255 > -# endif > -#endif > - > -char *qemu_get_host_name(Error **errp) > -{ > - long len = -1; > - g_autofree char *hostname = NULL; > - > -#ifdef _SC_HOST_NAME_MAX > - len = sysconf(_SC_HOST_NAME_MAX); > -#endif /* _SC_HOST_NAME_MAX */ > - > - if (len < 0) { > - len = HOST_NAME_MAX; > - } > - > - /* Unfortunately, gethostname() below does not guarantee a > - * NULL terminated string. Therefore, allocate one byte more > - * to be sure. */ > - hostname = g_new0(char, len + 1); > - > - if (gethostname(hostname, len) < 0) { > - error_setg_errno(errp, errno, > - "cannot get hostname"); > - return NULL; > - } > - > - return g_steal_pointer(&hostname); > -} > - > size_t qemu_get_host_physmem(void) > { > #ifdef _SC_PHYS_PAGES > diff --git a/util/oslib-win32.c b/util/oslib-win32.c > index 0371082d23b3..41df0a289e28 100644 > --- a/util/oslib-win32.c > +++ b/util/oslib-win32.c > @@ -537,19 +537,6 @@ bool qemu_write_pidfile(const char *filename, Error > **errp) > return true; > } > > -char *qemu_get_host_name(Error **errp) > -{ > - wchar_t tmp[MAX_COMPUTERNAME_LENGTH + 1]; > - DWORD size = G_N_ELEMENTS(tmp); > - > - if (GetComputerNameW(tmp, &size) == 0) { > - error_setg_win32(errp, GetLastError(), "failed close handle"); > - return NULL; > - } > - > - return g_utf16_to_utf8(tmp, size, NULL, NULL, NULL); > -} > - > size_t qemu_get_host_physmem(void) > { > MEMORYSTATUSEX statex; > -- > 2.35.1.693.g805e0a68082a > >