X-Git-Url: http://git.annexia.org/?p=libguestfs.git;a=blobdiff_plain;f=python%2Fguestfs-py.c;h=09d42707758f1b8e3d55cbf4e4a23c5aee7821ac;hp=8c7ad2284d7bcac18e9eb976e8c7f0d93e5f4aff;hb=1765330e07a48dc6f7bdef7007f69ebe606fa731;hpb=5365ebd501850ea10d9a5b28fc6480ea34dbe16d;ds=sidebyside diff --git a/python/guestfs-py.c b/python/guestfs-py.c index 8c7ad22..09d4270 100644 --- a/python/guestfs-py.c +++ b/python/guestfs-py.c @@ -92,6 +92,26 @@ put_string_list (char * const * const argv) return list; } +static PyObject * +put_table (char * const * const argv) +{ + PyObject *list, *item; + int argc, i; + + for (argc = 0; argv[argc] != NULL; ++argc) + ; + + list = PyList_New (argc >> 1); + for (i = 0; i < argc; i += 2) { + item = PyTuple_New (2); + PyTuple_SetItem (item, 0, PyString_FromString (argv[i])); + PyTuple_SetItem (item, 1, PyString_FromString (argv[i+1])); + PyList_SetItem (list, i >> 1, item); + } + + return list; +} + static void free_strings (char **argv) { @@ -303,6 +323,72 @@ put_lvm_lv_list (struct guestfs_lvm_lv_list *lvs) }; static PyObject * +put_stat (struct guestfs_stat *stat) +{ + PyObject *dict; + + dict = PyDict_New (); + PyDict_SetItemString (dict, "dev", + PyLong_FromLongLong (stat->dev)); + PyDict_SetItemString (dict, "ino", + PyLong_FromLongLong (stat->ino)); + PyDict_SetItemString (dict, "mode", + PyLong_FromLongLong (stat->mode)); + PyDict_SetItemString (dict, "nlink", + PyLong_FromLongLong (stat->nlink)); + PyDict_SetItemString (dict, "uid", + PyLong_FromLongLong (stat->uid)); + PyDict_SetItemString (dict, "gid", + PyLong_FromLongLong (stat->gid)); + PyDict_SetItemString (dict, "rdev", + PyLong_FromLongLong (stat->rdev)); + PyDict_SetItemString (dict, "size", + PyLong_FromLongLong (stat->size)); + PyDict_SetItemString (dict, "blksize", + PyLong_FromLongLong (stat->blksize)); + PyDict_SetItemString (dict, "blocks", + PyLong_FromLongLong (stat->blocks)); + PyDict_SetItemString (dict, "atime", + PyLong_FromLongLong (stat->atime)); + PyDict_SetItemString (dict, "mtime", + PyLong_FromLongLong (stat->mtime)); + PyDict_SetItemString (dict, "ctime", + PyLong_FromLongLong (stat->ctime)); + return dict; +}; + +static PyObject * +put_statvfs (struct guestfs_statvfs *statvfs) +{ + PyObject *dict; + + dict = PyDict_New (); + PyDict_SetItemString (dict, "bsize", + PyLong_FromLongLong (statvfs->bsize)); + PyDict_SetItemString (dict, "frsize", + PyLong_FromLongLong (statvfs->frsize)); + PyDict_SetItemString (dict, "blocks", + PyLong_FromLongLong (statvfs->blocks)); + PyDict_SetItemString (dict, "bfree", + PyLong_FromLongLong (statvfs->bfree)); + PyDict_SetItemString (dict, "bavail", + PyLong_FromLongLong (statvfs->bavail)); + PyDict_SetItemString (dict, "files", + PyLong_FromLongLong (statvfs->files)); + PyDict_SetItemString (dict, "ffree", + PyLong_FromLongLong (statvfs->ffree)); + PyDict_SetItemString (dict, "favail", + PyLong_FromLongLong (statvfs->favail)); + PyDict_SetItemString (dict, "fsid", + PyLong_FromLongLong (statvfs->fsid)); + PyDict_SetItemString (dict, "flag", + PyLong_FromLongLong (statvfs->flag)); + PyDict_SetItemString (dict, "namemax", + PyLong_FromLongLong (statvfs->namemax)); + return dict; +}; + +static PyObject * py_guestfs_launch (PyObject *self, PyObject *args) { PyObject *py_g; @@ -1889,6 +1975,352 @@ py_guestfs_command_lines (PyObject *self, PyObject *args) return py_r; } +static PyObject * +py_guestfs_stat (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + struct guestfs_stat *r; + const char *path; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_stat", + &py_g, &path)) + return NULL; + g = get_handle (py_g); + + r = guestfs_stat (g, path); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = put_stat (r); + free (r); + return py_r; +} + +static PyObject * +py_guestfs_lstat (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + struct guestfs_stat *r; + const char *path; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_lstat", + &py_g, &path)) + return NULL; + g = get_handle (py_g); + + r = guestfs_lstat (g, path); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = put_stat (r); + free (r); + return py_r; +} + +static PyObject * +py_guestfs_statvfs (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + struct guestfs_statvfs *r; + const char *path; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_statvfs", + &py_g, &path)) + return NULL; + g = get_handle (py_g); + + r = guestfs_statvfs (g, path); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = put_statvfs (r); + free (r); + return py_r; +} + +static PyObject * +py_guestfs_tune2fs_l (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + char **r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_tune2fs_l", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_tune2fs_l (g, device); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = put_table (r); + free_strings (r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_setro (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_setro", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_setro (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + Py_INCREF (Py_None); + py_r = Py_None; + return py_r; +} + +static PyObject * +py_guestfs_blockdev_setrw (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_setrw", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_setrw (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + Py_INCREF (Py_None); + py_r = Py_None; + return py_r; +} + +static PyObject * +py_guestfs_blockdev_getro (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_getro", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_getro (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyInt_FromLong ((long) r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_getss (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_getss", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_getss (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyInt_FromLong ((long) r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_getbsz (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_getbsz", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_getbsz (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyInt_FromLong ((long) r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_setbsz (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + int blocksize; + + if (!PyArg_ParseTuple (args, (char *) "Osi:guestfs_blockdev_setbsz", + &py_g, &device, &blocksize)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_setbsz (g, device, blocksize); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + Py_INCREF (Py_None); + py_r = Py_None; + return py_r; +} + +static PyObject * +py_guestfs_blockdev_getsz (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int64_t r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_getsz", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_getsz (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyLong_FromLongLong (r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_getsize64 (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int64_t r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_getsize64", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_getsize64 (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyLong_FromLongLong (r); + return py_r; +} + +static PyObject * +py_guestfs_blockdev_flushbufs (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_flushbufs", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_flushbufs (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + Py_INCREF (Py_None); + py_r = Py_None; + return py_r; +} + +static PyObject * +py_guestfs_blockdev_rereadpt (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + int r; + const char *device; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_blockdev_rereadpt", + &py_g, &device)) + return NULL; + g = get_handle (py_g); + + r = guestfs_blockdev_rereadpt (g, device); + if (r == -1) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + Py_INCREF (Py_None); + py_r = Py_None; + return py_r; +} + static PyMethodDef methods[] = { { (char *) "create", py_guestfs_create, METH_VARARGS, NULL }, { (char *) "close", py_guestfs_close, METH_VARARGS, NULL }, @@ -1955,6 +2387,20 @@ static PyMethodDef methods[] = { { (char *) "file", py_guestfs_file, METH_VARARGS, NULL }, { (char *) "command", py_guestfs_command, METH_VARARGS, NULL }, { (char *) "command_lines", py_guestfs_command_lines, METH_VARARGS, NULL }, + { (char *) "stat", py_guestfs_stat, METH_VARARGS, NULL }, + { (char *) "lstat", py_guestfs_lstat, METH_VARARGS, NULL }, + { (char *) "statvfs", py_guestfs_statvfs, METH_VARARGS, NULL }, + { (char *) "tune2fs_l", py_guestfs_tune2fs_l, METH_VARARGS, NULL }, + { (char *) "blockdev_setro", py_guestfs_blockdev_setro, METH_VARARGS, NULL }, + { (char *) "blockdev_setrw", py_guestfs_blockdev_setrw, METH_VARARGS, NULL }, + { (char *) "blockdev_getro", py_guestfs_blockdev_getro, METH_VARARGS, NULL }, + { (char *) "blockdev_getss", py_guestfs_blockdev_getss, METH_VARARGS, NULL }, + { (char *) "blockdev_getbsz", py_guestfs_blockdev_getbsz, METH_VARARGS, NULL }, + { (char *) "blockdev_setbsz", py_guestfs_blockdev_setbsz, METH_VARARGS, NULL }, + { (char *) "blockdev_getsz", py_guestfs_blockdev_getsz, METH_VARARGS, NULL }, + { (char *) "blockdev_getsize64", py_guestfs_blockdev_getsize64, METH_VARARGS, NULL }, + { (char *) "blockdev_flushbufs", py_guestfs_blockdev_flushbufs, METH_VARARGS, NULL }, + { (char *) "blockdev_rereadpt", py_guestfs_blockdev_rereadpt, METH_VARARGS, NULL }, { NULL, NULL, 0, NULL } };