Example #1
0
File: csv.c Project: takada-at/logq
static PyObject *
CSVParser_fread(CSVParser *self, size_t size)
{
    char *buf = PyMem_Malloc(sizeof(char)*size);
    if(buf==NULL){
        PyErr_NoMemory();
        return NULL;
    }
    char c;
    size_t readsize;
    PyObject *datas = PyList_New(0);
    if(self->fields==NULL){
        parse_reset(self);
    }
    while(size){
        PyFile_IncUseCount((PyFileObject*)self->pyfile);
        Py_BEGIN_ALLOW_THREADS
        readsize = fread(buf, 1, size, self->file);
        Py_END_ALLOW_THREADS
        PyFile_DecUseCount((PyFileObject*)self->pyfile);
        if(readsize==0)
            break;

        size -= readsize;
        while(readsize--) {
            logq_readc(buf)
        }
    }
err:
    return datas;
}
Example #2
0
static void
FileWrapper_dealloc(PyObject* self)
{
  PyFile_DecUseCount((PyFileObject*)((FileWrapper*)self)->file);
  Py_DECREF(((FileWrapper*)self)->file);
  PyObject_FREE(self);
}
Example #3
0
File: csv.c Project: takada-at/logq
static PyObject *
CSVParser_iternext(CSVParser *self)
{
    if(!self->is_file)
        return CSVParser_iternext_filelike(self);
    char buf[MAXBUFSIZE];
    char c;
    char *cp;
    PyObject *fields = NULL;
    long i;
    long linelen;
    Logq_Engine_reset(self->engine);
    while(!self->engine->is_success){
        if (parse_reset(self) < 0)
            return NULL;
        do {
            PyFile_IncUseCount((PyFileObject*)self->pyfile);
            Py_BEGIN_ALLOW_THREADS
            cp = fgets(buf, MAXBUFSIZE, self->file);
            Py_END_ALLOW_THREADS
            PyFile_DecUseCount((PyFileObject*)self->pyfile);
            if (cp == NULL) {
                /* End of input OR exception */
                if (!PyErr_Occurred() && (self->field_len != 0 ||
                                          self->state == IN_QUOTED_FIELD)) {
                    if (parse_save_field(self) >= 0 )
                        break;
                }
                return NULL;
            }
            ++self->line_num;
            linelen = strlen(buf);
            if (buf == NULL || linelen < 0) {
                return NULL;
            }
            for(i=0; i<linelen; ++i){
                c = buf[i];
                if (c == '\0') {
                    PyErr_Format(csv_error_obj,
                                 "line contains NULL byte");
                    goto err;
                }
                if (parse_process_char(self, c) < 0) {
                    goto err;
                }
                //query fail. go next line
                if (self->state == QUERY_FAIL){
                    if(buf[linelen-1]=='\n'){
                        self->state = START_RECORD;
                    }
                    break;
                }
            }
        } while (self->state != START_RECORD);
    }
    fields = self->fields;
    self->fields = NULL;
err:
    return fields;
}