X-Git-Url: http://git.annexia.org/?a=blobdiff_plain;f=python%2Fguestfs-py.c;h=21ecd543c5f0c7377822ca42845485efb9665429;hb=e038597ebd1e43c83a8ddde21c4f1898eb7a9a98;hp=9d2738c825cf262178a476d7b5faa7367d44754a;hpb=b3f11c5f62f725fa3f09452b38d52dba764f80d0;p=libguestfs.git diff --git a/python/guestfs-py.c b/python/guestfs-py.c index 9d2738c..21ecd54 100644 --- a/python/guestfs-py.c +++ b/python/guestfs-py.c @@ -92,6 +92,27 @@ 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) { + PyObject *item; + 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 +324,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; @@ -1806,6 +1893,189 @@ py_guestfs_lvm_remove_all (PyObject *self, PyObject *args) return py_r; } +static PyObject * +py_guestfs_file (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + char *r; + const char *path; + + if (!PyArg_ParseTuple (args, (char *) "Os:guestfs_file", + &py_g, &path)) + return NULL; + g = get_handle (py_g); + + r = guestfs_file (g, path); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyString_FromString (r); + free (r); + return py_r; +} + +static PyObject * +py_guestfs_command (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + char *r; + PyObject *py_arguments; + const char **arguments; + + if (!PyArg_ParseTuple (args, (char *) "OO:guestfs_command", + &py_g, &py_arguments)) + return NULL; + g = get_handle (py_g); + arguments = get_string_list (py_arguments); + if (!arguments) return NULL; + + r = guestfs_command (g, arguments); + free (arguments); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = PyString_FromString (r); + free (r); + return py_r; +} + +static PyObject * +py_guestfs_command_lines (PyObject *self, PyObject *args) +{ + PyObject *py_g; + guestfs_h *g; + PyObject *py_r; + char **r; + PyObject *py_arguments; + const char **arguments; + + if (!PyArg_ParseTuple (args, (char *) "OO:guestfs_command_lines", + &py_g, &py_arguments)) + return NULL; + g = get_handle (py_g); + arguments = get_string_list (py_arguments); + if (!arguments) return NULL; + + r = guestfs_command_lines (g, arguments); + free (arguments); + if (r == NULL) { + PyErr_SetString (PyExc_RuntimeError, guestfs_last_error (g)); + return NULL; + } + + py_r = put_string_list (r); + free_strings (r); + 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 PyMethodDef methods[] = { { (char *) "create", py_guestfs_create, METH_VARARGS, NULL }, { (char *) "close", py_guestfs_close, METH_VARARGS, NULL }, @@ -1869,6 +2139,13 @@ static PyMethodDef methods[] = { { (char *) "mounts", py_guestfs_mounts, METH_VARARGS, NULL }, { (char *) "umount_all", py_guestfs_umount_all, METH_VARARGS, NULL }, { (char *) "lvm_remove_all", py_guestfs_lvm_remove_all, METH_VARARGS, NULL }, + { (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 }, { NULL, NULL, 0, NULL } };