Changeset 4037 for neercs


Ignore:
Timestamp:
Nov 25, 2009, 1:36:22 PM (10 years ago)
Author:
Jean-Yves Lamoureux
Message:
  • Added error checking on PyObject?->char*
  • Different handling for errors/results
Location:
neercs/trunk/src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/interpreter.c

    r4035 r4037  
    161161    }
    162162
    163     if (screen_list->interpreter_props.output)
     163    if (screen_list->interpreter_props.output_err)
    164164    {
    165165        caca_set_color_ansi(screen_list->cv, CACA_RED, CACA_BLUE);
    166166        caca_printf(screen_list->cv, x + 2, y + 4,
    167                     screen_list->interpreter_props.output);
    168     }
    169 
     167                    screen_list->interpreter_props.output_err);
     168    }
     169    if (screen_list->interpreter_props.output_res)
     170    {
     171        caca_set_color_ansi(screen_list->cv, CACA_LIGHTGREEN, CACA_BLUE);
     172        caca_printf(screen_list->cv, x + 2, y + 4,
     173                    screen_list->interpreter_props.output_res);
     174    }
    170175}
    171176
     
    173178int python_init(struct screen_list *sl)
    174179{
    175     sl->interpreter_props.output = NULL;
     180    sl->interpreter_props.output_err = NULL;
     181    sl->interpreter_props.output_res = NULL;
    176182    Py_Initialize();
    177183   
     
    183189int python_close(struct screen_list *sl)
    184190{
    185     if (sl->interpreter_props.output)
    186         free(sl->interpreter_props.output);
    187     sl->interpreter_props.output = NULL;
     191    if (sl->interpreter_props.output_err)
     192        free(sl->interpreter_props.output_err);
     193    if (sl->interpreter_props.output_res)
     194        free(sl->interpreter_props.output_res);
     195    sl->interpreter_props.output_err = NULL;
     196    sl->interpreter_props.output_res = NULL;
    188197    Py_Finalize();
    189198    return 0;
     
    199208    debug("py Executing '%s'\n", sl->interpreter_props.command);
    200209
    201     if (sl->interpreter_props.output)
    202     {
    203         // FIXME free(sl->interpreter_props.output);
    204         sl->interpreter_props.output = NULL;
    205     }
    206 
     210    if (sl->interpreter_props.output_err)
     211    {
     212        free(sl->interpreter_props.output_err);
     213        sl->interpreter_props.output_err = NULL;
     214    }
     215    if (sl->interpreter_props.output_res)
     216    {
     217        free(sl->interpreter_props.output_res);
     218        sl->interpreter_props.output_res = NULL;
     219    }
     220   
    207221    PyObject *pModule, *pName, *pFunc, *pValue;
    208222
     
    211225    if (!pName)
    212226    {
    213         sl->interpreter_props.output = getPythonError();
     227        sl->interpreter_props.output_err = getPythonError();
    214228        err = 1;
    215229        debug("py Error 1\n");
     
    228242            if (pValue != NULL) {
    229243                char *res = getStringFromPyObject(pValue);
    230                 sl->interpreter_props.output = res;
     244                sl->interpreter_props.output_res = res;
    231245                debug("py Result of call: %s\n", res);
    232246                Py_DECREF(pValue);
     247                err = 2;
    233248            }
    234249            else {
    235250                Py_DECREF(pFunc);
    236251                Py_DECREF(pModule);
    237                 sl->interpreter_props.output = getPythonError();
     252                sl->interpreter_props.output_err = getPythonError();
    238253                err = 1;
    239254                debug("py Call failed\n");
     
    244259        else
    245260        {
    246             sl->interpreter_props.output = getPythonError();
     261            sl->interpreter_props.output_err = getPythonError();
    247262            err = 1;
    248263            debug("py Error 2\n");
     
    252267    else
    253268    {
    254         sl->interpreter_props.output = getPythonError();
     269        sl->interpreter_props.output_err = getPythonError();
    255270        err = 1;
    256         debug("py: %s\n", sl->interpreter_props.output);
     271        debug("py: %s\n", sl->interpreter_props.output_err);
    257272        goto end;
    258273    }
     
    287302    char *evalue = getStringFromPyObject(value);
    288303
    289     int r = asprintf(&err, "Error in %s : %s", etype, evalue);
     304    int r = asprintf(&err, "%s", evalue);
    290305        (void)r;
    291306    return err;
     
    297312    char *err = PyBytes_AS_STRING(PyUnicode_AsEncodedString(str, "utf-8",
    298313                                                            "Error ~"));
    299     return err;
     314   
     315    char *ret = strdup(err);
     316    return ret;
    300317}
    301318
  • neercs/trunk/src/neercs.h

    r4033 r4037  
    150150    int size;
    151151    char *command;
    152     char *output;
     152    char *output_err;
     153    char *output_res;
    153154};
    154155
Note: See TracChangeset for help on using the changeset viewer.