Py_XDECREF(mnt_context_get_mtab_userdata(self->cxt));
mnt_free_context(self->cxt);
- self->ob_type->tp_free((PyObject*) self);
+ PyFree(self);
}
static PyObject *Context_new(PyTypeObject *type,
PyErr_SetString(PyExc_TypeError, NODEL_ATTR);
return -1;
}
- else if (!PyInt_Check(value)) {
+ else if (!PyLong_Check(value)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return -1;
}
- optsmode = PyInt_AsLong(value);
+ optsmode = PyLong_AsLong(value);
return mnt_context_set_optsmode(self->cxt, optsmode);
}
PyErr_SetString(PyExc_TypeError, NODEL_ATTR);
return -1;
}
- else if (!PyInt_Check(value)) {
+ else if (!PyLong_Check(value)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return -1;
}
- syscall_status = PyInt_AsLong(value);
+ syscall_status = PyLong_AsLong(value);
return mnt_context_set_syscall_status(self->cxt, syscall_status);
}
static PyObject *Context_repr(ContextObjext *self)
{
- return PyString_FromFormat("<libmount.Context object at %p, restricted=%s>",
+ return PyUnicode_FromFormat("<libmount.Context object at %p, restricted=%s>",
self, mnt_context_is_restricted(self->cxt) ? "True" : "False");
}
PyTypeObject ContextType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"libmount.Context", /*tp_name*/
sizeof(ContextObjext), /*tp_basicsize*/
0, /*tp_itemsize*/
*/
#include "pylibmount.h"
+#include <errno.h>
#define Fs_HELP "Fs(source=None, root=None, target=None, fstype=None, options=None, attributes=None, freq=0, passno=0)"
return PyObjectResultInt(mnt_fs_get_devno(self->fs));
}
-#define Fs_print_debug_HELP "print_debug(ostream)\n\n"
-static PyObject *Fs_print_debug(FsObject *self, PyObject *args, PyObject *kwds)
-{
- PyFileObject *stream = NULL;
- int rc;
- FILE *f = NULL;
- char *kwlist[] = { "ostream", NULL };
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist,
- &PyFile_Type, &stream)) {
- PyErr_SetString(PyExc_TypeError, ARG_ERR);
- return NULL;
- }
-
- f = PyFile_AsFile((PyObject *) stream);
- rc = mnt_fs_print_debug(self->fs, f);
- return rc ? UL_RaiseExc(-rc) : UL_IncRef(self);
+#define Fs_print_debug_HELP "print_debug()\n\n"
+static PyObject *Fs_print_debug(FsObject *self)
+{
+ PySys_WriteStdout("------ fs: %p\n", self->fs);
+ PySys_WriteStdout("source: %s\n", mnt_fs_get_source(self->fs));
+ PySys_WriteStdout("target: %s\n", mnt_fs_get_target(self->fs));
+ PySys_WriteStdout("fstype: %s\n", mnt_fs_get_fstype(self->fs));
+
+ if (mnt_fs_get_options(self->fs))
+ PySys_WriteStdout("optstr: %s\n", mnt_fs_get_options(self->fs));
+ if (mnt_fs_get_vfs_options(self->fs))
+ PySys_WriteStdout("VFS-optstr: %s\n", mnt_fs_get_vfs_options(self->fs));
+ if (mnt_fs_get_fs_options(self->fs))
+ PySys_WriteStdout("FS-opstr: %s\n", mnt_fs_get_fs_options(self->fs));
+ if (mnt_fs_get_user_options(self->fs))
+ PySys_WriteStdout("user-optstr: %s\n", mnt_fs_get_user_options(self->fs));
+ if (mnt_fs_get_optional_fields(self->fs))
+ PySys_WriteStdout("optional-fields: '%s'\n", mnt_fs_get_optional_fields(self->fs));
+ if (mnt_fs_get_attributes(self->fs))
+ PySys_WriteStdout("attributes: %s\n", mnt_fs_get_attributes(self->fs));
+
+ if (mnt_fs_get_root(self->fs))
+ PySys_WriteStdout("root: %s\n", mnt_fs_get_root(self->fs));
+
+ if (mnt_fs_get_swaptype(self->fs))
+ PySys_WriteStdout("swaptype: %s\n", mnt_fs_get_swaptype(self->fs));
+ if (mnt_fs_get_size(self->fs))
+ PySys_WriteStdout("size: %jd\n", mnt_fs_get_size(self->fs));
+ if (mnt_fs_get_usedsize(self->fs))
+ PySys_WriteStdout("usedsize: %jd\n", mnt_fs_get_usedsize(self->fs));
+ if (mnt_fs_get_priority(self->fs))
+ PySys_WriteStdout("priority: %d\n", mnt_fs_get_priority(self->fs));
+
+ if (mnt_fs_get_bindsrc(self->fs))
+ PySys_WriteStdout("bindsrc: %s\n", mnt_fs_get_bindsrc(self->fs));
+ if (mnt_fs_get_freq(self->fs))
+ PySys_WriteStdout("freq: %d\n", mnt_fs_get_freq(self->fs));
+ if (mnt_fs_get_passno(self->fs))
+ PySys_WriteStdout("pass: %d\n", mnt_fs_get_passno(self->fs));
+ if (mnt_fs_get_id(self->fs))
+ PySys_WriteStdout("id: %d\n", mnt_fs_get_id(self->fs));
+ if (mnt_fs_get_parent_id(self->fs))
+ PySys_WriteStdout("parent: %d\n", mnt_fs_get_parent_id(self->fs));
+ if (mnt_fs_get_devno(self->fs))
+ PySys_WriteStdout("devno: %d:%d\n", major(mnt_fs_get_devno(self->fs)),
+ minor(mnt_fs_get_devno(self->fs)));
+ if (mnt_fs_get_tid(self->fs))
+ PySys_WriteStdout("tid: %d\n", mnt_fs_get_tid(self->fs));
+ if (mnt_fs_get_comment(self->fs))
+ PySys_WriteStdout("comment: '%s'\n", mnt_fs_get_comment(self->fs));
+ return UL_IncRef(self);
}
/*
** Fs getters/setters
PyErr_SetString(PyExc_TypeError, NODEL_ATTR);
return -1;
- } else if (!PyInt_Check(value)) {
+ } else if (!PyLong_Check(value)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return -1;
}
- freq = PyInt_AsLong(value);
+ freq = PyLong_AsLong(value);
if (freq == -1 && PyErr_Occurred()) {
PyErr_SetString(PyExc_RuntimeError, "type conversion failed");
return -1;
if (!value) {
PyErr_SetString(PyExc_TypeError, NODEL_ATTR);
return -1;
- } else if (!PyInt_Check(value)) {
+ } else if (!PyLong_Check(value)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return -1;
}
- passno = PyInt_AsLong(value);
+ passno = PyLong_AsLong(value);
if (passno == -1 && PyErr_Occurred()) {
PyErr_SetString(PyExc_RuntimeError, "type conversion failed");
return -1;
{"match_options", (PyCFunction)Fs_match_options, METH_VARARGS|METH_KEYWORDS, Fs_match_options_HELP},
{"streq_srcpath", (PyCFunction)Fs_streq_srcpath, METH_VARARGS|METH_KEYWORDS, Fs_streq_srcpath_HELP},
{"streq_target", (PyCFunction)Fs_streq_target, METH_VARARGS|METH_KEYWORDS, Fs_streq_target_HELP},
- {"print_debug", (PyCFunction)Fs_print_debug, METH_VARARGS|METH_KEYWORDS, Fs_print_debug_HELP},
+ {"print_debug", (PyCFunction)Fs_print_debug, METH_NOARGS, Fs_print_debug_HELP},
{NULL}
};
DBG(FS, pymnt_debug_h(self->fs, "destrutor py-obj: %p, py-refcnt=%d",
self, (int) ((PyObject *) self)->ob_refcnt));
mnt_unref_fs(self->fs);
- self->ob_type->tp_free((PyObject*)self);
+ PyFree(self);
}
static PyObject *Fs_new(PyTypeObject *type, PyObject *args __attribute__((unused)),
*tgt = mnt_fs_get_target(self->fs),
*type = mnt_fs_get_fstype(self->fs);
- return PyString_FromFormat(
+ return PyUnicode_FromFormat(
"<libmount.Fs object at %p, "
"source=%s, target=%s, fstype=%s>",
self,
PyTypeObject FsType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"libmount.Fs", /*tp_name*/
sizeof(FsObject), /*tp_basicsize*/
0, /*tp_itemsize*/
PyObject *LibmountError;
int pylibmount_debug_mask;
-
PyObject *UL_IncRef(void *killme)
{
Py_INCREF(killme);
return killme;
}
+void PyFree(void *o)
+{
+#if PY_MAJOR_VERSION >= 3
+ Py_TYPE(o)->tp_free((PyObject *)o);
+#else
+ ((PyObject *)o)->ob_type->tp_free((PyObject *)o);
+#endif
+}
+
/* Demultiplexer for various possible error conditions across the libmount library */
void *UL_RaiseExc(int e)
{
return result;
}
-/* wrapper around a common use case for PyString_AsString() */
+/* wrapper around a common use case for PyUnicode_AsASCIIString() */
char *pystos(PyObject *pys)
{
+#if PY_MAJOR_VERSION >= 3
+ if (!PyUnicode_Check(pys)) {
+ PyErr_SetString(PyExc_TypeError, ARG_ERR);
+ return NULL;
+ }
+ return (char *)PyUnicode_1BYTE_DATA(pys);
+#else
if (!PyString_Check(pys)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return NULL;
}
return PyString_AsString(pys);
+#endif
}
/*
"and returns a (tag, value) tuple. Every attribute is \"filtered\"" \
"through appropriate getters/setters, no values are set directly."
-static PyMethodDef libmount_methods[] = {
- {NULL} /* Sentinel */
+
+struct module_state {
+ PyObject *error;
};
-#ifndef PyMODINIT_FUNC
-# define PyMODINIT_FUNC void
+#if PY_MAJOR_VERSION >= 3
+#define GETSTATE(m) ((struct module_state*)PyModule_GetState(m))
+#else
+#define GETSTATE(m) (&_state)
+static struct module_state _state;
#endif
+
+static PyObject *
+error_out(PyObject *m __attribute__((unused))) {
+ struct module_state *st = GETSTATE(m);
+ PyErr_SetString(st->error, "something bad happened");
+ return NULL;
+}
+
+static PyMethodDef pylibmount_methods[] = {
+ {"error_out", (PyCFunction)error_out, METH_NOARGS, NULL},
+ {NULL, NULL}
+};
+
+#if PY_MAJOR_VERSION >= 3
+
+static int pylibmount_traverse(PyObject *m, visitproc visit, void *arg) {
+ Py_VISIT(GETSTATE(m)->error);
+ return 0;
+}
+
+static int pylibmount_clear(PyObject *m) {
+ Py_CLEAR(GETSTATE(m)->error);
+ return 0;
+}
+
+static struct PyModuleDef moduledef = {
+ PyModuleDef_HEAD_INIT,
+ "pylibmount",
+ NULL,
+ sizeof(struct module_state),
+ pylibmount_methods,
+ NULL,
+ pylibmount_traverse,
+ pylibmount_clear,
+ NULL
+};
+#define INITERROR return NULL
+PyObject * PyInit_pylibmount(void);
+PyObject * PyInit_pylibmount(void)
+#else
+#define INITERROR return
+# ifndef PyMODINIT_FUNC
+# define PyMODINIT_FUNC void
+# endif
PyMODINIT_FUNC initpylibmount(void);
PyMODINIT_FUNC initpylibmount(void)
+#endif
{
- PyObject *m = Py_InitModule3("pylibmount", libmount_methods, PYLIBMOUNT_DESC);
+#if PY_MAJOR_VERSION >= 3
+ PyObject *m = PyModule_Create(&moduledef);
+#else
+ PyObject *m = Py_InitModule3("pylibmount", pylibmount_methods, PYLIBMOUNT_DESC);
+#endif
if (!m)
- return;
+ INITERROR;
/*
* init debug stuff
*/
/* Still useful for functions using iterators internally */
PyModule_AddIntConstant(m, "MNT_ITER_FORWARD", MNT_ITER_FORWARD);
PyModule_AddIntConstant(m, "MNT_ITER_BACKWARD", MNT_ITER_BACKWARD);
+
+#if PY_MAJOR_VERSION >= 3
+ return m;
+#endif
}
extern PyObject *PyObjectResultStr(const char *s);
extern char *pystos(PyObject *pys);
+extern void PyFree(void *o);
return rc ? UL_RaiseExc(-rc) : UL_IncRef(self);
}
-#define Table_write_file_HELP "write_file(file)\n\n" \
+#define Table_write_file_HELP "write_file(path)\n\n" \
"This function writes tab to file(stream)"
static PyObject *Table_write_file(TableObject *self, PyObject *args, PyObject *kwds)
{
int rc;
- PyFileObject *stream = NULL;
+ //PyObject *stream = NULL;
FILE *f = NULL;
- char *kwlist[] = {"file", NULL};
+ char *path = NULL;
+ char *kwlist[] = {"path", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!", kwlist,
- &PyFile_Type, &stream)) {
+ if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist,
+ &path)) {
PyErr_SetString(PyExc_TypeError, ARG_ERR);
return NULL;
}
- f = PyFile_AsFile((PyObject *)stream);
+ if (!(f = fopen(path, "w")))
+ return UL_RaiseExc(errno);
rc = mnt_table_write_file(self->tab, f);
+ fclose(f);
return rc ? UL_RaiseExc(-rc) : UL_IncRef(self);
}
return rc ? UL_RaiseExc(-rc) : UL_IncRef(self);
}
-#define Table_parse_stream_HELP "parse_stream(stream, filename)\n\n" \
- "Returns self or raises an exception in case of an error."
-static PyObject *Table_parse_stream(TableObject *self, PyObject* args, PyObject *kwds)
-{
- int rc;
- PyFileObject *stream = NULL;
- char *filename = NULL;
- FILE *f;
- char *kwlist[] = {"stream", "filename", NULL};
-
- if (!PyArg_ParseTupleAndKeywords(args, kwds, "O!s", kwlist, &PyFile_Type, &stream, &filename)) {
- PyErr_SetString(PyExc_TypeError, ARG_ERR);
- return NULL;
- }
- f = PyFile_AsFile((PyObject *)stream);
- rc = mnt_table_parse_stream(self->tab, f, filename);
- return rc ? UL_RaiseExc(-rc) : UL_IncRef(self);
-}
#define Table_add_fs_HELP "add_fs(fs)\n\nAdds a new entry to tab.\n" \
"Returns self or raises an exception in case of an error."
{"parse_dir", (PyCFunction)Table_parse_dir, METH_VARARGS|METH_KEYWORDS, Table_parse_dir_HELP},
{"parse_swaps", (PyCFunction)Table_parse_swaps, METH_VARARGS|METH_KEYWORDS, Table_parse_swaps_HELP},
{"is_fs_mounted", (PyCFunction)Table_is_fs_mounted, METH_VARARGS|METH_KEYWORDS, Table_is_fs_mounted_HELP},
- {"parse_stream", (PyCFunction)Table_parse_stream, METH_VARARGS|METH_KEYWORDS, Table_parse_stream_HELP},
{"add_fs", (PyCFunction)Table_add_fs, METH_VARARGS|METH_KEYWORDS, Table_add_fs_HELP},
{"remove_fs", (PyCFunction)Table_remove_fs, METH_VARARGS|METH_KEYWORDS, Table_remove_fs_HELP},
{"next_fs", (PyCFunction)Table_next_fs, METH_NOARGS, Table_next_fs_HELP},
mnt_free_iter(self->iter);
Py_XDECREF(self->errcb);
- self->ob_type->tp_free((PyObject*)self);
+ PyFree(self);
}
static PyObject *Table_new(PyTypeObject *type,
static PyObject *Table_repr(TableObject *self)
{
- return PyString_FromFormat(
+ return PyUnicode_FromFormat(
"<libmount.Table object at %p, entries=%d, comments_enabled=%s, errcb=%s>",
self,
mnt_table_get_nents(self->tab),
}
PyTypeObject TableType = {
- PyObject_HEAD_INIT(NULL)
- 0, /*ob_size*/
+ PyVarObject_HEAD_INIT(NULL, 0)
"libmount.Table", /*tp_name*/
sizeof(TableObject), /*tp_basicsize*/
0, /*tp_itemsize*/
-#!/bin/python2
import os
import sys
import stat
import libmount as mnt
def usage(tss):
- print "\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0])
+ print("\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0]))
for i in tss:
- print "\t{15:-s}".format(i[0])
+ print("\t{15:-s}".format(i[0]))
if i[2] != "":
- print " {:s}\n".format(i[2])
+ print(" {:s}\n".format(i[2]))
print("\n")
return 1
if i[0] == argv[1]:
rc = i[1](i, argv[1:])
if rc:
- print "FAILED [rc={:d}]".format(rc)
+ print("FAILED [rc={:d}]".format(rc))
break
if ((rc < 0) and (i == ())):
try:
cxt.mount()
except Exception:
- print "failed to mount"
+ print("failed to mount")
return -1
- print "successfully mounted"
+ print("successfully mounted")
return rc
def test_umount(ts, argv):
try:
cxt.umount()
except Exception:
- print "failed to umount"
+ print("failed to umount")
return 1
- print "successfully umounted"
+ print("successfully umounted")
return rc
def test_flags(ts, argv):
cxt.prepare_mount()
# catch ioerror here
except IOError as e:
- print "failed to prepare mount {:s}".format(e.strerror)
+ print("failed to prepare mount {:s}".format(e.strerror))
opt = cxt.fs.options
if (opt):
- print "options: {:s}", opt
+ print("options: {:s}", opt)
- print "flags: {08:lx}".format(cxt.mflags())
+ print("flags: {08:lx}".format(cxt.mflags()))
return rc
def test_mountall(ts, argv):
while (cxt.next_mount()):
tgt = i.target
if (ignored == 1):
- print "{:s}: ignored: not match".format(tgt)
+ print("{:s}: ignored: not match".format(tgt))
elif (ignored == 2):
- print "{:s}: ignored: already mounted".format(tgt)
+ print("{:s}: ignored: already mounted".format(tgt))
elif (not cxt.status):
if (mntrc > 0):
# ?? errno = mntrc
- print "{:s}: mount failed".format(tgt)
+ print("{:s}: mount failed".format(tgt))
else:
- print "{:s}: mount failed".format(tgt)
+ print("{:s}: mount failed".format(tgt))
else:
- print "{:s}: successfully mounted".format(tgt)
+ print("{:s}: successfully mounted".format(tgt))
return 0
-#!/bin/python2
import os
import sys
import stat
import libmount as mnt
def usage(tss):
- print "\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0])
+ print("\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0]))
for i in tss:
- print "\t{15:-s}".format(i[0])
+ print("\t{15:-s}".format(i[0]))
if i[2] != "":
- print " {:s}\n".format(i[2])
+ print(" {:s}\n".format(i[2]))
print("\n")
return 1
if i[0] == argv[1]:
rc = i[1](i, argv[1:])
if rc:
- print "FAILED [rc={:d}]".format(rc)
+ print("FAILED [rc={:d}]".format(rc))
break
if ((rc < 0) and (i == ())):
return not not rc #because !!rc is too mainstream for python
def parser_errcb(tb, fname, line):
- print "{:s}:{:d}: parse error".format(fname, line)
+ print("{:s}:{:d}: parse error".format(fname, line))
return 1
def create_table(f, comments):
try:
tb.parse_file(f)
except Exception:
- print "{:s}: parsing failed".format(f)
+ print("{:s}: parsing failed".format(f))
return None
return tb
if not fs:
return rc
- print "ORIGINAL:"
- fs.print_debug(sys.stdout)
+ print("ORIGINAL:")
+ fs.print_debug()
fs = fs.copy_fs(None)
if not fs:
return rc
- print "COPY:"
- fs.print_debug(sys.stdout)
+ print("COPY:")
+ fs.print_debug()
return 0
def test_parse(ts, argv):
tb = create_table(argv[1], parse_comments)
if tb.intro_comment:
- print "Initial comment:\n\"{:s}\"".format(tb.intro_comment)
+ print("Initial comment:\n\"{:s}\"".format(tb.intro_comment))
#while ((fs = tb.next_fs()) != None):
for fs in iter(ft.partial(tb.next_fs), None):
- fs.print_debug(sys.stdout)
+ fs.print_debug()
if tb.trailing_comment:
- print "Trailing comment:\n\"{:s}\"".format(tb.trailing_comment)
+ print("Trailing comment:\n\"{:s}\"".format(tb.trailing_comment))
return 0
def test_find(ts, argv, dr):
if len(argv) != 4:
- print "try --help"
+ print("try --help")
return -errno.EINVAL
f, find, what = argv[1:]
fs = tb.find_target(what, dr)
if not fs:
- print "{:s}: not found {:s} '{:s}'".format(f, find, what)
+ print("{:s}: not found {:s} '{:s}'".format(f, find, what))
else:
- fs.print_debug(sys.stdout)
+ fs.print_debug()
return 0
def test_find_fw(ts, argv):
fs = tb.find_pair(argv[2], argv[3], mnt.MNT_ITER_FORWARD)
if not fs:
return rc
- fs.print_debug(sys.stdout)
+ fs.print_debug()
return 0
def test_is_mounted(ts, argv):
rc = -1
tb = mnt.Tab(path="/proc/self/mountinfo")
if not tb:
- print "failed to parse mountinto"
+ print("failed to parse mountinto")
return rc
fstab = create_table(argv[1], False)
fs = ()
for fs in ft.iter(tb.next_fs(), -1):
if tb.is_fs_mounted(fs):
- print "{:s} already mounted on {:s}".format(fs.source, fs.target)
+ print("{:s} already mounted on {:s}".format(fs.source, fs.target))
else:
- print "{:s} not mounted on {:s}".format(fs.source, fs.target)
+ print("{:s} not mounted on {:s}".format(fs.source, fs.target))
return 0
def test_find_mountpoint(ts, argv):
fs = tb.find_mountpoint(argv[1], mnt.MNT_ITER_BACKWARD)
if not fs:
return rc
- fs.print_debug(sys.stdout)
+ fs.print_debug()
return 0
tss = (
- ( "--parse", test_parse, "<file> [--comments] parse and print tab" ),
+ ( "--parse", test_parse, "<file> [--comments] parse and print(tab" ),
( "--find-forward", test_find_fw, "<file> <source|target> <string>" ),
( "--find-backward", test_find_bw, "<file> <source|target> <string>" ),
( "--find-pair", test_find_pair, "<file> <source> <target>" ),
-#!/bin/python2
import os
import sys
import stat
import libmount as mnt
def usage(tss):
- print "\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0])
+ print("\nUsage:\n\t{:s} <test> [testoptions]\nTests:\n".format(sys.argv[0]))
for i in tss:
- print "\t{15:-s}".format(i[0])
+ print("\t{15:-s}".format(i[0]))
if i[2] != "":
- print " {:s}\n".format(i[2])
+ print(" {:s}\n".format(i[2]))
print("\n")
return 1
if i[0] == argv[1]:
rc = i[1](i, argv[1:])
if rc:
- print "FAILED [rc={:d}]".format(rc)
+ print("FAILED [rc={:d}]".format(rc))
break
if ((rc < 0) and (i == ())):
export LD_LIBRARY_PATH="$TS_TOPDIR/../.libs"
export PYTHONPATH="$TS_TOPDIR/../$LIBNAME/python:$TS_TOPDIR/../.libs"
+
+ export PYTHON_VERSION=$(awk '/^PYTHON_VERSION/ { print $3 }' $top_builddir/Makefile)
+ export PYTHON_MAJOR_VERSION=$(echo $PYTHON_VERSION | sed 's/\..*//')
+
+ export PYTHON="python${PYTHON_MAJOR_VERSION}"
}
function ts_valgrind {
TS_TOPDIR="$(dirname $0)/../.."
TS_DESC="context-py"
-PYDBG="python -m pdb"
. $TS_TOPDIR/functions.sh
ts_init "$*"
ts_skip_nonroot
TESTPROG="$TS_HELPER_PYLIBMOUNT_CONTEXT"
+
+PYDBG="$PYTHON -m pdb"
LABEL=libmount-test
UUID=$(uuidgen)
MOUNTPOINT="$TS_MOUNTPOINT"
ts_init_subtest "mount-by-devname"
mkdir -p $MOUNTPOINT &> /dev/null
-$TESTPROG --mount $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB || \
echo "(by device) cannot find $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "umount-by-devname"
-$TESTPROG --umount $DEVICE >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $DEVICE >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB &&
echo "umount (device) failed: found $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "mount-by-label"
mkdir -p $MOUNTPOINT &> /dev/null
-$TESTPROG --mount LABEL="$LABEL" $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount LABEL="$LABEL" $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB || \
echo "(by label) cannot find $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "umount-by-mountpoint"
-$TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB && \
echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "mount-by-uuid"
mkdir -p $MOUNTPOINT &> /dev/null
-$TESTPROG --mount UUID="$UUID" $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount UUID="$UUID" $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB || \
echo "(by uuid) cannot find $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
-$TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB &&
echo "umount failed: found $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "mount-flags"
mkdir -p $MOUNTPOINT &> /dev/null
-$TESTPROG --mount -o ro,noexec,nosuid,strictatime $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount -o ro,noexec,nosuid,strictatime $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
$TS_CMD_FINDMNT --kernel $MOUNTPOINT -o VFS-OPTIONS -n >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB || \
echo "cannot find $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
-$TESTPROG --mount -o remount,rw $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount -o remount,rw $MOUNTPOINT >> $TS_OUTPUT 2>&1
$TS_CMD_FINDMNT --kernel $MOUNTPOINT -o VFS-OPTIONS -n >> $TS_OUTPUT 2>&1
-$TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_MTAB &&
echo "umount failed: found $DEVICE in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
mkfs.ext3 -F $img &> /dev/null
udevadm settle
-$TESTPROG --mount -o loop $img $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount -o loop $img $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $MOUNTPOINT $LIBMOUNT_MTAB || \
echo "(loopdev) cannot find $MOUNTPOINT in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
udevadm settle
-$TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $MOUNTPOINT $LIBMOUNT_MTAB &&
echo "umount failed: found $MOUNTPOINT in $LIBMOUNT_MTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_py libmount
ts_skip_nonroot
+
TESTPROG="$TS_HELPER_PYLIBMOUNT_CONTEXT"
LABEL=libmount-test
UUID=$(uuidgen)
ts_init_subtest "mount-by-devname"
mkdir -p $MOUNTPOINT &> /dev/null
-ts_valgrind $TESTPROG --mount $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE /proc/mounts || \
echo "(by device) cannot find $DEVICE in /proc/mounts" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "umount-by-devname"
-ts_valgrind $TESTPROG --umount $DEVICE >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $DEVICE >> $TS_OUTPUT 2>&1
grep -q $DEVICE /proc/mounts &&
echo "umount (device) failed: found $DEVICE in /proc/mounts" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "mount-uhelper"
mkdir -p $MOUNTPOINT &> /dev/null
-ts_valgrind $TESTPROG --mount -o uhelper=foo,rw LABEL="$LABEL" $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --mount -o uhelper=foo,rw LABEL="$LABEL" $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_UTAB || \
echo "(by label) cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "umount"
-ts_valgrind $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+$PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_UTAB && \
echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_init_subtest "mount-uhelper-subvol"
mkdir -p $MOUNTPOINT &> /dev/null
- ts_valgrind $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ $PYTHON $TESTPROG --mount -o uhelper=foo,rw,subvol=sub $DEVICE $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_UTAB || \
echo "cannot find $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
ts_log "---"
ts_init_subtest "umount-subvol"
- ts_valgrind $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
+ $PYTHON $TESTPROG --umount $MOUNTPOINT >> $TS_OUTPUT 2>&1
grep -q $DEVICE $LIBMOUNT_UTAB && \
echo "umount (mountpoint) failed: found $DEVICE in $LIBMOUNT_UTAB" >> $TS_OUTPUT 2>&1
ts_finalize_subtest
TS_TOPDIR="$(dirname $0)/../.."
TS_DESC="tab files-py"
-PYDBG="python -m pdb"
. $TS_TOPDIR/functions.sh
ts_init "$*"
+
+set -x
+
ts_init_py libmount
+
+PYDBG="$PYTHON -m pdb"
TESTPROG="$TS_HELPER_PYLIBMOUNT_TAB"
ts_init_subtest "parse-fstab"
-$TESTPROG --parse "$TS_SELF/files/fstab" &> $TS_OUTPUT
+$PYTHON $TESTPROG --parse "$TS_SELF/files/fstab" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
+exit 1
+
ts_init_subtest "parse-fstab-full"
-ts_valgrind $TESTPROG --parse "$TS_SELF/files/fstab.comment" --comments &> $TS_OUTPUT
+$PYTHON $TESTPROG --parse "$TS_SELF/files/fstab.comment" --comments &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "parse-mtab"
-ts_valgrind $TESTPROG --parse "$TS_SELF/files/mtab" &> $TS_OUTPUT
+$PYTHON $TESTPROG --parse "$TS_SELF/files/mtab" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "parse-fstab-broken"
-ts_valgrind $TESTPROG --parse "$TS_SELF/files/fstab.broken" &> $TS_OUTPUT
+$PYTHON $TESTPROG --parse "$TS_SELF/files/fstab.broken" &> $TS_OUTPUT
sed -i -e 's/.*fstab.broken:[[:digit:]]*: parse error//g; s/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "parse-mountinfo"
-ts_valgrind $TESTPROG --parse "$TS_SELF/files/mountinfo" &> $TS_OUTPUT
+$PYTHON $TESTPROG --parse "$TS_SELF/files/mountinfo" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "copy"
-ts_valgrind $TESTPROG --copy-fs "$TS_SELF/files/fstab" &> $TS_OUTPUT
+$PYTHON $TESTPROG --copy-fs "$TS_SELF/files/fstab" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "find-source"
-ts_valgrind $TESTPROG --find-forward "$TS_SELF/files/fstab" source UUID=fef7ccb3-821c-4de8-88dc-71472be5946f &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward "$TS_SELF/files/fstab" source UUID=fef7ccb3-821c-4de8-88dc-71472be5946f &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "find-target"
-ts_valgrind $TESTPROG --find-forward "$TS_SELF/files/fstab" target /home/foo &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward "$TS_SELF/files/fstab" target /home/foo &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "find-target2"
-ts_valgrind $TESTPROG --find-forward "$TS_SELF/files/fstab" target /any/foo &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward "$TS_SELF/files/fstab" target /any/foo &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "find-target3"
-ts_valgrind $TESTPROG --find-forward "$TS_SELF/files/fstab" target /any/foo/ &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward "$TS_SELF/files/fstab" target /any/foo/ &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "find-pair"
-ts_valgrind $TESTPROG --find-pair "$TS_SELF/files/mtab" /dev/mapper/kzak-home /home/kzak &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-pair "$TS_SELF/files/mtab" /dev/mapper/kzak-home /home/kzak &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
#!/bin/bash
TS_TOPDIR="$(dirname $0)/../.."
-export LD_LIBRARY_PATH="$TS_TOPDIR/../.libs"
-export PYTHONPATH="$TS_TOPDIR/../libmount/python:$TS_TOPDIR/../.libs"
TS_DESC="tags-py"
-PYDBG="python -m pdb"
. $TS_TOPDIR/functions.sh
ts_init "$*"
TESTPROG="$TS_HELPER_PYLIBMOUNT_TAB"
+PYDBG="$PYTHON -m pdb"
+
DEVICE=$(ts_scsi_debug_init dev_size_mb=50 sector_size=512)
LABEL="testLibmount"
UUID="de1bc6e9-34ab-4151-a1d7-900042eee8d9"
echo "LABEL=$LABEL /mnt/mountpoint auto defaults" > $FSTAB
ts_init_subtest "fstab-label2uuid"
-ts_valgrind $TESTPROG --find-forward $FSTAB source "UUID=$UUID" &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source "UUID=$UUID" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "fstab-label2dev"
-ts_valgrind $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "fstab-uuid"
# has to return /mnt/mountpoint2
-ts_valgrind $TESTPROG --find-forward $FSTAB source "UUID=$UUID" &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source "UUID=$UUID" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "fstab-label"
# has to return /mnt/mountpoint
-ts_valgrind $TESTPROG --find-forward $FSTAB source "LABEL=$LABEL" &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source "LABEL=$LABEL" &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "fstab-dev2label"
# has to return /mnt/mountpoint
-ts_valgrind $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
ts_finalize_subtest
ts_init_subtest "fstab-dev"
# has to return /mnt/mountpoint3
-ts_valgrind $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
+$PYTHON $TESTPROG --find-forward $FSTAB source $DEVICE &> $TS_OUTPUT
sed -i -e 's/fs: 0x.*/fs:/g' $TS_OUTPUT
sed -i -e 's/source: .*//g' $TS_OUTPUT # devname is generated, remove it
ts_finalize_subtest
# Copyright (C) 2010 Karel Zak <kzak@redhat.com>
TS_TOPDIR="$(dirname $0)/../.."
-export LD_LIBRARY_PATH="$TS_TOPDIR/../.libs"
-export PYTHONPATH="$TS_TOPDIR/../libmount/python:$TS_TOPDIR/../.libs"
TS_DESC="tab update-py"
. $TS_TOPDIR/functions.sh
ts_init "$*"
+ts_init_py libmount
ts_skip_nonroot
TESTPROG="$TS_HELPER_PYLIBMOUNT_UPDATE"
cp "$TS_SELF/files/fstab.comment" $LIBMOUNT_FSTAB
ts_init_subtest "fstab-replace"
-$TESTPROG --replace "LABEL=foo" "/mnt/foo"
+$PYTHON $TESTPROG --replace "LABEL=foo" "/mnt/foo"
cp $LIBMOUNT_FSTAB $TS_OUTPUT # save the fstab aside
ts_finalize_subtest #checks the fstab