Merge pull request #890 from trenkel/master
authortrenkel <github@semidefinite.de>
Sun, 15 Feb 2015 15:34:09 +0000 (16:34 +0100)
committertrenkel <github@semidefinite.de>
Sun, 15 Feb 2015 15:34:09 +0000 (16:34 +0100)
Fix compiler warnings with Python3.

1  2 
src/collectd-python.pod
src/python.c

diff --combined src/collectd-python.pod
@@@ -57,13 -57,15 +57,15 @@@ modules, e.g. "time"
  =item B<Encoding> I<Name>
  
  The default encoding for Unicode objects you pass to collectd. If you omit this
- option it will default to B<ascii> on I<Python 2> and B<utf-8> on I<Python 3>.
- This is hardcoded in Python and will ignore everything else, including your
- locale.
+ option it will default to B<ascii> on I<Python 2>. On I<Python 3> it will
+ always be B<utf-8>, as this function was removed, so this will be silently
+ ignored.
+ These defaults are hardcoded in Python and will ignore everything else,
+ including your locale.
  
  =item B<ModulePath> I<Name>
  
 -Appends I<Name> to B<sys.path>. You won't be able to import any scripts you
 +Prepends I<Name> to B<sys.path>. You won't be able to import any scripts you
  wrote unless they are located in one of the directories in this list. Please
  note that it only has effect on plugins loaded after this option. You can
  use multiple B<ModulePath> lines to add more than one directory.
diff --combined src/python.c
@@@ -1034,13 -1034,15 +1034,15 @@@ PyMODINIT_FUNC PyInit_collectd(void) 
  #endif
  
  static int cpy_init_python() {
-       char *argv = "";
        PyObject *sys;
        PyObject *module;
  
  #ifdef IS_PY3K
+       wchar_t *argv = L"";
        /* Add a builtin module, before Py_Initialize */
        PyImport_AppendInittab("collectd", PyInit_collectd);
+ #else
+       char *argv = "";
  #endif
        
        Py_Initialize();
@@@ -1117,9 -1119,13 +1119,13 @@@ static int cpy_config(oconfig_item_t *c
                } else if (strcasecmp(item->key, "Encoding") == 0) {
                        if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_STRING)
                                continue;
+ #ifdef IS_PY3K
+                       NOTICE("python: \"Encoding\" was used in the config file but Python3 was used, which does not support changing encodings. Ignoring this.");
+ #else
                        /* Why is this even necessary? And undocumented? */
                        if (PyUnicode_SetDefaultEncoding(item->values[0].value.string))
                                cpy_log_exception("setting default encoding");
+ #endif
                } else if (strcasecmp(item->key, "LogTraces") == 0) {
                        if (item->values_num != 1 || item->values[0].type != OCONFIG_TYPE_BOOLEAN)
                                continue;
                                cpy_log_exception("python initialization");
                                continue;
                        }
 -                      if (PyList_Append(sys_path, dir_object) != 0) {
 -                              ERROR("python plugin: Unable to append \"%s\" to "
 +                      if (PyList_Insert(sys_path, 0, dir_object) != 0) {
 +                              ERROR("python plugin: Unable to prepend \"%s\" to "
                                      "python module path.", dir);
                                cpy_log_exception("python initialization");
                        }