python: Add XC binding for Xen build ID

Extend the list of xc() object methods with additional one to display
Xen's buildid. The implementation follows the libxl implementation
(e.g. max buildid size assumption being XC_PAGE_SIZE minus
sizeof(buildid->len)).

Signed-off-by: Pawel Wieczorkiewicz <wipawel@amazon.de>
Reviewed-by: Martin Mazein <amazein@amazon.de>
Reviewed-by: Andra-Irina Paraschiv <andraprs@amazon.com>
Reviewed-by: Norbert Manthey <nmanthey@amazon.de>
Acked-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
This commit is contained in:
Pawel Wieczorkiewicz authored and Andrew Cooper committed 2019-08-20 14:24:05 +01:00
1 parent 248faa637d
commit bbf230b2a1
1 file changed
+27
+27
View File
@@ -1214,6 +1214,26 @@ out:
return ret_obj ? ret_obj : pyxc_error_to_exception(self->xc_handle);
}
static PyObject *pyxc_xenbuildid(XcObject *self)
{
xen_build_id_t *buildid;
int i, r;
char *str;
buildid = alloca(XC_PAGE_SIZE);
buildid->len = XC_PAGE_SIZE - sizeof(*buildid);
r = xc_version(self->xc_handle, XENVER_build_id, buildid);
if ( r <= 0 )
return pyxc_error_to_exception(self->xc_handle);
str = alloca((r * 2) + 1);
for ( i = 0; i < r; i++ )
snprintf(&str[i * 2], 3, "%02hhx", buildid->buf[i]);
return Py_BuildValue("s", str);
}
static PyObject *pyxc_xeninfo(XcObject *self)
{
xen_extraversion_t xen_extra;
@@ -2297,6 +2317,13 @@ static PyMethodDef pyxc_methods[] = {
"Returns [dict]: information about Xen"
" [None]: on failure.\n" },
{ "buildid",
(PyCFunction)pyxc_xenbuildid,
METH_NOARGS, "\n"
"Get Xen buildid\n"
"Returns [str]: Xen buildid"
" [None]: on failure.\n" },
{ "shadow_control",
(PyCFunction)pyxc_shadow_control,
METH_VARARGS | METH_KEYWORDS, "\n"
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.