]> granicus.if.org Git - python/commitdiff
Issue #3717: Fix Demo/embed/demo.c.
authorMartin v. Löwis <martin@v.loewis.de>
Fri, 17 Oct 2008 15:54:44 +0000 (15:54 +0000)
committerMartin v. Löwis <martin@v.loewis.de>
Fri, 17 Oct 2008 15:54:44 +0000 (15:54 +0000)
Reviewed by Benjamin Peterson.

Demo/embed/demo.c
Misc/NEWS

index bc2406ae849c55062bdec078dc47244678fc91ee..b9ea6f57b9e3323d280346337a151ca20b40e038 100644 (file)
@@ -2,34 +2,38 @@
 
 #include "Python.h"
 
-void initxyzzy(void); /* Forward */
+PyObject* PyInit_xyzzy(void); /* Forward */
 
 main(int argc, char **argv)
 {
+       /* Ignore passed-in argc/argv. If desired, conversion
+          should use mbstowcs to convert them. */
+       wchar_t *args[] = {L"embed", L"hello", 0};
+
        /* Pass argv[0] to the Python interpreter */
-       Py_SetProgramName(argv[0]);
+       Py_SetProgramName(args[0]);
+
+       /* Add a static module */
+       PyImport_AppendInittab("xyzzy", PyInit_xyzzy);
 
        /* Initialize the Python interpreter.  Required. */
        Py_Initialize();
 
-       /* Add a static module */
-       initxyzzy();
-
        /* Define sys.argv.  It is up to the application if you
           want this; you can also let it undefined (since the Python 
           code is generally not a main program it has no business
           touching sys.argv...) */
-       PySys_SetArgv(argc, argv);
+       PySys_SetArgv(2, args);
 
        /* Do some application specific code */
        printf("Hello, brave new world\n\n");
 
        /* Execute some Python statements (in module __main__) */
        PyRun_SimpleString("import sys\n");
-       PyRun_SimpleString("print sys.builtin_module_names\n");
-       PyRun_SimpleString("print sys.modules.keys()\n");
-       PyRun_SimpleString("print sys.executable\n");
-       PyRun_SimpleString("print sys.argv\n");
+       PyRun_SimpleString("print(sys.builtin_module_names)\n");
+       PyRun_SimpleString("print(sys.modules.keys())\n");
+       PyRun_SimpleString("print(sys.executable)\n");
+       PyRun_SimpleString("print(sys.argv)\n");
 
        /* Note that you can call any public function of the Python
           interpreter here, e.g. call_object(). */
@@ -57,9 +61,20 @@ static PyMethodDef xyzzy_methods[] = {
        {NULL,          NULL}           /* sentinel */
 };
 
-void
-initxyzzy(void)
+static struct PyModuleDef xyzzymodule = {
+       {}, /* m_base */
+       "xyzzy",  /* m_name */
+       0,  /* m_doc */
+       0,  /* m_size */
+       xyzzy_methods,  /* m_methods */
+       0,  /* m_reload */
+       0,  /* m_traverse */
+       0,  /* m_clear */
+       0,  /* m_free */
+};
+
+PyObject*
+PyInit_xyzzy(void)
 {
-       PyImport_AddModule("xyzzy");
-       Py_InitModule("xyzzy", xyzzy_methods);
+       return PyModule_Create(&xyzzymodule);
 }
index 72b807348d824a8efc53bf95d3546270cbcfe81c..8781877774981d438fb783e1e1925c91d1f0b81c 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -74,6 +74,8 @@ Build
 Tools/Demos
 -----------
 
+- Issue #3717: Fix Demo/embed/demo.c.
+
 - Issue #4072: Add a distutils demo for build_py_2to3.