From 210ea612b3ab96b451e2a24900098939f2381fbc Mon Sep 17 00:00:00 2001 From: Milan Broz Date: Sun, 10 Aug 2014 16:09:32 +0200 Subject: [PATCH] Avoid compilation warnings in Python wrapper. All these are Python interface misconceptions, the strings (or string arrays) in parameters should be const parameters. To avoid gcc confusing warnings just explicitly re-cast them. --- python/pycryptsetup.c | 63 ++++++++++++++++++++++--------------------- 1 file changed, 33 insertions(+), 30 deletions(-) diff --git a/python/pycryptsetup.c b/python/pycryptsetup.c index 6e6ddc7c..6dcda094 100644 --- a/python/pycryptsetup.c +++ b/python/pycryptsetup.c @@ -25,6 +25,9 @@ #include "libcryptsetup.h" +/* Python API use char* where const char* should be used... */ +#define CONST_CAST(x) (x)(uintptr_t) + #if PY_MAJOR_VERSION < 3 #define MOD_ERROR_VAL #define MOD_SUCCESS_VAL(val) @@ -43,6 +46,8 @@ ob = PyModule_Create(&moduledef); #endif +MOD_INIT(pycryptsetup); + typedef struct { PyObject_HEAD @@ -185,7 +190,7 @@ constructor takes one to five arguments:\n\ static int CryptSetup_init(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"device", "name", "yesDialog", "passwordDialog", "logFunc", NULL}; + static const char *kwlist[] = {"device", "name", "yesDialog", "passwordDialog", "logFunc", NULL}; PyObject *yesDialogCB = NULL, *passwordDialogCB = NULL, *cmdLineLogCB = NULL, @@ -193,7 +198,7 @@ static int CryptSetup_init(CryptSetupObject* self, PyObject *args, PyObject *kwd char *device = NULL, *deviceName = NULL; int r; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zzOOO", kwlist, &device, &deviceName, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zzOOO", CONST_CAST(char**)kwlist, &device, &deviceName, &yesDialogCB, &passwordDialogCB, &cmdLineLogCB)) return -1; @@ -256,14 +261,13 @@ CryptSetup_activate_HELP[] = static PyObject *CryptSetup_activate(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"name", "passphrase", NULL}; + static const char *kwlist[] = {"name", "passphrase", NULL}; char *name = NULL, *passphrase = NULL; int is; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|s", kwlist, &name, &passphrase)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|s", CONST_CAST(char**)kwlist, &name, &passphrase)) return NULL; - // FIXME: allow keyfile and \0 in passphrase is = crypt_activate_by_passphrase(self->device, name, CRYPT_ANY_SLOT, passphrase, passphrase ? strlen(passphrase) : 0, 0); @@ -300,10 +304,10 @@ CryptSetup_askyes_HELP[] = static PyObject *CryptSetup_askyes(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"message", NULL}; + static const char *kwlist[] = {"message", NULL}; PyObject *message = NULL, *result, *arglist; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", kwlist, &message)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "O", CONST_CAST(char**)kwlist, &message)) return NULL; Py_INCREF(message); @@ -328,10 +332,10 @@ CryptSetup_log_HELP[] = static PyObject *CryptSetup_log(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"priority", "message", NULL}; + static const char *kwlist[] = {"priority", "message", NULL}; PyObject *message = NULL, *priority = NULL, *result, *arglist; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO", kwlist, &message, &priority)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "OO", CONST_CAST(char**)kwlist, &message, &priority)) return NULL; Py_INCREF(message); @@ -416,12 +420,12 @@ CryptSetup_luksFormat_HELP[] = static PyObject *CryptSetup_luksFormat(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"cipher", "cipherMode", "keysize", NULL}; + static const char *kwlist[] = {"cipher", "cipherMode", "keysize", NULL}; char *cipher_mode = NULL, *cipher = NULL; int keysize = 256; PyObject *keysize_object = NULL; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zzO", kwlist, + if (!PyArg_ParseTupleAndKeywords(args, kwds, "|zzO", CONST_CAST(char**)kwlist, &cipher, &cipher_mode, &keysize_object)) return NULL; @@ -455,12 +459,12 @@ CryptSetup_addKeyByPassphrase_HELP[] = static PyObject *CryptSetup_addKeyByPassphrase(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"passphrase", "newPassphrase", "slot", NULL}; + static const char *kwlist[] = {"passphrase", "newPassphrase", "slot", NULL}; char *passphrase = NULL, *newpassphrase = NULL; size_t passphrase_len = 0, newpassphrase_len = 0; int slot = CRYPT_ANY_SLOT; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|i", kwlist, &passphrase, &newpassphrase, &slot)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|i", CONST_CAST(char**)kwlist, &passphrase, &newpassphrase, &slot)) return NULL; if(passphrase) @@ -483,12 +487,12 @@ CryptSetup_addKeyByVolumeKey_HELP[] = static PyObject *CryptSetup_addKeyByVolumeKey(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"newPassphrase", "slot", NULL}; + static const char *kwlist[] = {"newPassphrase", "slot", NULL}; char *newpassphrase = NULL; size_t newpassphrase_len = 0; int slot = CRYPT_ANY_SLOT; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", kwlist, &newpassphrase, &slot)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s|i", CONST_CAST(char**)kwlist, &newpassphrase, &slot)) return NULL; if (newpassphrase) @@ -506,12 +510,12 @@ CryptSetup_removePassphrase_HELP[] = static PyObject *CryptSetup_removePassphrase(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"passphrase", NULL}; + static const char *kwlist[] = {"passphrase", NULL}; char *passphrase = NULL; size_t passphrase_len = 0; int is; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", kwlist, &passphrase)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "s", CONST_CAST(char**)kwlist, &passphrase)) return NULL; if (passphrase) @@ -533,10 +537,10 @@ CryptSetup_killSlot_HELP[] = static PyObject *CryptSetup_killSlot(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"slot", NULL}; + static const char *kwlist[] = {"slot", NULL}; int slot = CRYPT_ANY_SLOT; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &slot)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", CONST_CAST(char**)kwlist, &slot)) return NULL; switch (crypt_keyslot_status(self->device, slot)) { @@ -579,7 +583,7 @@ CryptSetup_Resume_HELP[] = static PyObject *CryptSetup_Resume(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"passphrase", NULL}; + static const char *kwlist[] = {"passphrase", NULL}; char* passphrase = NULL; size_t passphrase_len = 0; @@ -588,10 +592,9 @@ static PyObject *CryptSetup_Resume(CryptSetupObject* self, PyObject *args, PyObj return NULL; } - if (! PyArg_ParseTupleAndKeywords(args, kwds, "|s", kwlist, &passphrase)) + if (! PyArg_ParseTupleAndKeywords(args, kwds, "|s", CONST_CAST(char**)kwlist, &passphrase)) return NULL; - if (passphrase) passphrase_len = strlen(passphrase); @@ -622,10 +625,10 @@ CryptSetup_debugLevel_HELP[] = static PyObject *CryptSetup_debugLevel(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"level", NULL}; + static const char *kwlist[] = {"level", NULL}; int level = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", kwlist, &level)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "i", CONST_CAST(char**)kwlist, &level)) return NULL; crypt_set_debug_level(level); @@ -641,10 +644,10 @@ CryptSetup_iterationTime_HELP[] = static PyObject *CryptSetup_iterationTime(CryptSetupObject* self, PyObject *args, PyObject *kwds) { - static char *kwlist[] = {"time_ms", NULL}; + static const char *kwlist[] = {"time_ms", NULL}; uint64_t time_ms = 0; - if (!PyArg_ParseTupleAndKeywords(args, kwds, "K", kwlist, &time_ms)) + if (!PyArg_ParseTupleAndKeywords(args, kwds, "K", CONST_CAST(char**)kwlist, &time_ms)) return NULL; crypt_set_iteration_time(self->device, time_ms); @@ -653,9 +656,9 @@ static PyObject *CryptSetup_iterationTime(CryptSetupObject* self, PyObject *args } static PyMemberDef CryptSetup_members[] = { - {"yesDialogCB", T_OBJECT_EX, offsetof(CryptSetupObject, yesDialogCB), 0, "confirmation dialog callback"}, - {"cmdLineLogCB", T_OBJECT_EX, offsetof(CryptSetupObject, cmdLineLogCB), 0, "logging callback"}, - {"passwordDialogCB", T_OBJECT_EX, offsetof(CryptSetupObject, passwordDialogCB), 0, "password dialog callback"}, + {CONST_CAST(char*)"yesDialogCB", T_OBJECT_EX, offsetof(CryptSetupObject, yesDialogCB), 0, CONST_CAST(char*)"confirmation dialog callback"}, + {CONST_CAST(char*)"cmdLineLogCB", T_OBJECT_EX, offsetof(CryptSetupObject, cmdLineLogCB), 0, CONST_CAST(char*)"logging callback"}, + {CONST_CAST(char*)"passwordDialogCB", T_OBJECT_EX, offsetof(CryptSetupObject, passwordDialogCB), 0, CONST_CAST(char*)"password dialog callback"}, {NULL} }; @@ -671,7 +674,7 @@ static PyMethodDef CryptSetup_methods[] = { /* cryptsetup info entrypoints */ {"luksUUID", (PyCFunction)CryptSetup_luksUUID, METH_NOARGS, CryptSetup_luksUUID_HELP}, {"isLuks", (PyCFunction)CryptSetup_isLuks, METH_NOARGS, CryptSetup_isLuks_HELP}, - {"info", (PyCFunction)CryptSetup_Info, METH_NOARGS, CryptSetup_Info_HELP}, + {"info", (PyCFunction)CryptSetup_Info, METH_NOARGS, CryptSetup_Info_HELP}, {"status", (PyCFunction)CryptSetup_Status, METH_NOARGS, CryptSetup_Status_HELP}, /* cryptsetup mgmt entrypoints */