=================================================================== RCS file: /home/cvs/OpenXM/src/ox_python/ox_python.c,v retrieving revision 1.4 retrieving revision 1.6 diff -u -p -r1.4 -r1.6 --- OpenXM/src/ox_python/ox_python.c 2019/03/22 00:14:50 1.4 +++ OpenXM/src/ox_python/ox_python.c 2022/01/02 00:23:25 1.6 @@ -1,4 +1,4 @@ -/* $OpenXM: OpenXM/src/ox_python/ox_python.c,v 1.3 2018/09/08 05:04:34 takayama Exp $ +/* $OpenXM: OpenXM/src/ox_python/ox_python.c,v 1.5 2021/12/31 07:43:48 takayama Exp $ */ #include @@ -152,14 +152,18 @@ cmo *make_error2(const char *reason,const char *fname, cmo **argv; int n; char *s; + char s_tmp[256]; + s = s_tmp; n = 5; argv = (cmo **) GC_malloc(sizeof(cmo *)*n); - ms = (cmo *)new_cmo_string("Error"); argv[0] = ms; - if (reason != NULL) {s = (char *)GC_malloc(strlen(reason)+1); strcpy(s,reason); - }else strcpy(s,""); + ms = (cmo *)new_cmo_string("error"); argv[0] = ms; + if (reason != NULL) {s = (char *)GC_malloc(strlen(reason)+3); + strcpy(s,"\"");strcat(s,reason);strcat(s,"\""); + }else strcpy(s,"0"); ms = (cmo *) new_cmo_string(s); argv[1] = ms; - if (fname != NULL) {s = (char *)GC_malloc(strlen(fname)+1); strcpy(s,fname); - }else strcpy(s,""); + if (fname != NULL) {s = (char *)GC_malloc(strlen(fname)+3); + strcpy(s,"\"");strcat(s,fname);strcat(s,"\""); + }else strcpy(s,"0"); ms = (cmo *) new_cmo_string(s); argv[2] = ms; err = (cmo *)new_cmo_int32(line); argv[3] = err; err = (cmo *)new_cmo_int32(code); argv[4] = err; @@ -477,7 +481,7 @@ void push_error_from_file() { FILE *fp; #define BUF_SIZE 1024 char logname[BUF_SIZE]; - char cmd[BUF_SIZE]; + char cmd[BUF_SIZE+256]; char file[BUF_SIZE]; char reason[BUF_SIZE]; int gsl_errno, line; @@ -526,7 +530,7 @@ int main(int argc,char *argv[]) #endif /* Initialize python */ - Py_SetProgramName(argv[0]); /* optional but recommended */ + Py_SetProgramName((wchar_t *) argv[0]); /* optional but recommended */ Py_Initialize(); @@ -590,7 +594,7 @@ int my_PyRun_String() { if (py_main == NULL) py_main = PyImport_AddModule("__main__"); if (py_dict == NULL) py_dict = PyModule_GetDict(py_main); // pyRes = PyRun_String(cmd,Py_single_input,py_dict,py_dict); - pyRes = PyRun_String(cmd,Py_single_input,py_dict,py_dict); + pyRes = PyRun_String(cmd,Py_eval_input,py_dict,py_dict); if (pyRes==NULL) { push(make_error2("PyRun_String: exception",NULL,0,-1)); PyRun_SimpleString("\n"); @@ -602,15 +606,17 @@ int my_PyRun_String() { } int push_python_result(PyObject *pyRes) { - if (PyString_Check(pyRes)) { - push((cmo *)new_cmo_string(PyString_AsString(pyRes))); + if (PyUnicode_Check(pyRes)) { + push((cmo *)new_cmo_string(PyBytes_AsString(PyUnicode_AsEncodedString(pyRes,"UTF-8","strict")))); return(0); - }else if (PyInt_Check(pyRes)) { - push((cmo *)new_cmo_int32((int) PyInt_AS_LONG(pyRes))); + }else if (PyLong_Check(pyRes)) { + push((cmo *)new_cmo_int32((int) PyLong_AsLong(pyRes))); return(0); }else { - push((cmo *)new_cmo_string(PyString_AsString(PyObject_Str(pyRes)))); + push((cmo *)new_cmo_string(PyBytes_AsString(PyUnicode_AsEncodedString(PyObject_Str(pyRes),"UTF-8","strict")))); return(0); + /* push((cmo *)new_cmo_string(PyBytes_AsString(PyObject_Str(pyRes)))); + return(0); */ // push(make_error2("PyRun_String returns an object which as not been implemented.",NULL,0,-1)); // return(-1); } @@ -634,14 +640,14 @@ int my_eval() { printf("my_eval cmd=%s\n",cmd); // code from https://docs.python.jp/2.7/extending/embedding.html - if (pName==NULL) pName = PyString_FromString("__builtin__"); + if (pName==NULL) pName = PyBytes_FromString("__builtin__"); if (pModule==NULL) pModule = PyImport_Import(pName); if (pModule != NULL) { if (pFunc==NULL) pFunc = PyObject_GetAttrString(pModule, "eval"); if (pFunc && PyCallable_Check(pFunc)) { pArgs = PyTuple_New(3); - PyTuple_SetItem(pArgs,0,PyString_FromString(cmd)); + PyTuple_SetItem(pArgs,0,PyBytes_FromString(cmd)); PyTuple_SetItem(pArgs,1,PyEval_GetGlobals()); PyTuple_SetItem(pArgs,2,PyEval_GetLocals()); pValue = PyObject_CallObject(pFunc, pArgs); @@ -698,7 +704,7 @@ int my_eval2() { if (pModule != NULL) { if (pFunc && PyCallable_Check(pFunc)) { pArgs = PyTuple_New(1); - PyTuple_SetItem(pArgs,0,PyString_FromString(cmd)); + PyTuple_SetItem(pArgs,0,PyBytes_FromString(cmd)); pValue = PyObject_CallObject(pFunc, pArgs); Py_DECREF(pArgs); if (pValue != NULL) {