CLIP_DLLEXPORT void destroy_c_object(void *item) { C_object *co = (C_object *) item; /* alena add for some object*/ C_signal *cs, *csnext; //printf("destroy object %s\n", co->type_name); if (!co) return; if (co->destroy) co->destroy(co->cmachine, co); if (co->object) _list_remove_cwidget(co->cmachine, co->object); _clip_destroy(co->cmachine, &co->obj); for (cs = co->siglist; cs;) { csnext = cs->next; //printf("destroy signal %s \n", cs->signame); _clip_destroy(co->cmachine, &cs->cfunc); if (cs) free(cs); cs = csnext; } _clip_destroy_c_item(co->cmachine, co->handle, _C_ITEM_TYPE_WIDGET); free(co); }
CLIP_DLLEXPORT void destroy_c_widget(void *item) { C_widget *cw = (C_widget *) item; C_signal *cs, *csnext; //printf("destroy widget %s\n", cw->type_name); if (!cw) return; if (cw->destroy) cw->destroy(cw->cmachine, cw); if (cw->widget) _list_remove_cwidget(cw->cmachine, cw->widget); _clip_destroy(cw->cmachine, &cw->obj); for (cs = cw->siglist; cs;) { csnext = cs->next; _clip_destroy(cw->cmachine, &cs->cfunc); if (cs) free(cs); cs = csnext; } if (cs) free(cs); _clip_destroy_c_item(cw->cmachine, cw->handle, _C_ITEM_TYPE_WIDGET); free(cw); //printf("destroy ok \n"); }
int dbtcp_fetch(ClipMachine* cm,SQLROWSET* rs,int recs,ClipVar* eval,int every,ClipVar* ors){ DBTCP_ROWSET* rowset = (DBTCP_ROWSET*)rs; DBTCP_CONN* conn = rowset->conn; DBTCP_STMT* stmt = rowset->stmt; int i,j,er = 0,r; void **rec; if(rowset->done) return 0; if(!recs) recs = 0x7fffffff; for(j=0;j<recs;j++){ r = dbftp_fetch_row(conn->conn); if(r == FETCH_EOF) goto done; else if(r == FETCH_ERROR){ dbtcp_error(cm,conn->loc,ER_FETCH,conn->conn,NULL); er = 1; goto done; } rowset->loaded++; rec = calloc(rowset->nfields,sizeof(void*)); for(i=0;i<rowset->nfields;i++){ char* tmp = dbftp_fetch_value(conn->conn,i); int len = strlen(tmp); rec[i] = calloc(1,len+sizeof(int)); *(int*)rec[i] = len; memcpy((char*)rec[i]+4,tmp,len); } rowset->data = realloc(rowset->data,rowset->loaded*sizeof(void*)); rowset->data[rowset->loaded - 1] = rec; if(eval && (eval->t.type == CCODE_t || eval->t.type == PCODE_t) && !(rowset->loaded % every)){ ClipVar var,*v; if(_clip_eval(cm,eval,1,ors,&var)){ _clip_destroy(cm,&var); er = 1; goto done; } v = _clip_vptr(&var); if(v->t.type == LOGICAL_t && !v->l.val){ _clip_destroy(cm,&var); goto done; } _clip_destroy(cm,&var); } } return 0; done: rowset->lastrec = rowset->loaded; rowset->done = 1; if(!rowset->lastrec){ rowset->bof = rowset->eof = 1; rowset->recno = 0; } _clip_destroy_c_item(cm,stmt->stmt_item,_C_ITEM_TYPE_SQL); return er; }
int clip_RDDCLOSEALL(ClipMachine * ClipMachineMemory) { const char *__PROC__ = "RDDCLOSEALL"; RDD_DATA *rd; int key, i, er; for (i = 0; i < ClipMachineMemory->container->len_of_Container; i++) { if (ClipMachineMemory->container->ContainerItem_items_of_Container[i].type_of_ContainerItem == _C_ITEM_TYPE_RDD) { rd = (RDD_DATA *) ClipMachineMemory->container->ContainerItem_items_of_Container[i].item_of_ContainerItem; if (rd->ClipMachineMemory == ClipMachineMemory && rd->area == -1) { key = ClipMachineMemory->container->ContainerItem_items_of_Container[i].key_of_ContainerItem; if ((er = rdd_flushbuffer(ClipMachineMemory, rd, __PROC__))) goto err; if (rd->readonly) rd->vtbl->_rlock(ClipMachineMemory, rd, __PROC__); else rd->vtbl->_wlock(ClipMachineMemory, rd, __PROC__); if ((er = rdd_closearea(ClipMachineMemory, rd, __PROC__))) goto err; _clip_destroy_c_item(ClipMachineMemory, key, _C_ITEM_TYPE_RDD); rd = (RDD_DATA *) _clip_fetch_c_item_type(ClipMachineMemory, _C_ITEM_TYPE_RDD, &key); } } } return 0; err: return er; }
int clip_RGCANCEL(ClipMachine * ClipMachineMemory) { int item = _clip_parni(ClipMachineMemory, 1); /* container pattern */ _clip_destroy_c_item(ClipMachineMemory, item, _C_ITEM_TYPE_REGEX); return 0; }
int ms_fetch(ClipMachine* mp,SQLROWSET* rs,int recs,ClipVar* eval,int every,ClipVar* ors){ MS_ROWSET* rowset = (MS_ROWSET*)rs; MS_STMT* stmt = rowset->stmt; MYSQL_ROW row; int i,j,er = 0; unsigned long *lens; void **rec; if(rowset->done) return 0; if(!recs) recs = 0x7fffffff; for(j=0;j<recs;j++){ row = mysql_fetch_row(stmt->res); if(!row) goto done; rowset->loaded++; rec = calloc(rowset->nfields,sizeof(void*)); lens = mysql_fetch_lengths(stmt->res); for(i=0;i<rowset->nfields;i++){ if(row[i]){ rec[i] = malloc(lens[i] + 4); *((int *) (rec[i])) = (int) lens[i]; memcpy(((char *) rec[i]) + 4, row[i], lens[i]); } else { rec[i] = NULL; } } rowset->data = realloc(rowset->data,rowset->loaded*sizeof(void*)); rowset->data[rowset->loaded - 1] = rec; if(eval && (eval->t.type == CCODE_t || eval->t.type == PCODE_t) && !(rowset->loaded % every)){ ClipVar var,*v; if(_clip_eval(mp,eval,1,ors,&var)){ _clip_destroy(mp,&var); er = 1; goto done; } v = _clip_vptr(&var); if(v->t.type == LOGICAL_t && !v->l.val){ _clip_destroy(mp,&var); goto done; } _clip_destroy(mp,&var); } } return 0; done: rowset->lastrec = rowset->loaded; rowset->done = 1; if(!rowset->lastrec){ rowset->bof = rowset->eof = 1; rowset->recno = 0; } _clip_destroy_c_item(mp,stmt->stmt_item,_C_ITEM_TYPE_SQL); return er; }
static int _clip_sockclose(ClipMachine *mp) { int fd = _clip_parni(mp, 1); C_FILE *cf = (C_FILE *) _clip_fetch_c_item(mp, fd, _C_ITEM_TYPE_FILE); int ret = -1, *err = _clip_fetch_item(mp, HASH_ferror); fd_set rfds; struct timeval tv; int arg; if (cf == NULL || cf->type != FT_SOCKET) { *err = EBADF; } arg = fcntl(cf->fileno, F_GETFL, 0); if(!(arg & O_NONBLOCK)) { FD_ZERO(&rfds); FD_SET(cf->fileno,&rfds); tv.tv_sec = 1; //timeout / 1000; tv.tv_usec = 100; //(timeout % 1000) * 1000; select(cf->fileno+1,&rfds,NULL,NULL,&tv); } if (_clip_destroy_c_item(mp, fd, _C_ITEM_TYPE_FILE)) { *err = ret = 0; } else { *err = errno; } /* _clip_retni(mp, ret); TODO? What type of value should return */ _clip_retl(mp, (ret == 0)); return 0; }
int rdd_ii_closetag(ClipMachine * ClipMachineMemory, int h, const char *__PROC__) { RDD_ORDER *ro = (RDD_ORDER *) _clip_fetch_c_item(ClipMachineMemory, h, _C_ITEM_TYPE_I_ORDER); int i; CHECKIO(ro); for (i = 0; i < ro->index->norders; i++) { if (ro->index->orders[i] == ro) { for (i++; i < ro->index->norders; i++) { ro->index->orders[i - 1] = ro->index->orders[i]; } } } ro->index->norders--; ro->index->orders = (RDD_ORDER **) realloc(ro->index->orders, ro->index->norders * sizeof(RDD_ORDER *)); destroy_rdd_order(ClipMachineMemory, ro); _clip_destroy_c_item(ClipMachineMemory, h, _C_ITEM_TYPE_I_ORDER); return 0; }
int clip_COM_CLOSE(ClipMachine * mp) { v24_port_t *gz; int fd = _clip_parni(mp, 1); int ret = -1, *err = _clip_fetch_item(mp, HASH_ferror); if (fd < 1 || fd > 32) return EG_ARG; fd = keys[fd]; gz = (v24_port_t *) _clip_fetch_c_item(mp, fd, _C_ITEM_TYPE_COMPORT); if (gz == NULL) return EG_ARG; else if (_clip_destroy_c_item(mp, fd, _C_ITEM_TYPE_COMPORT)) { ret = 0; *err = 0; } _clip_retl(mp, (ret == 0)); return 0; }
int pg_fetch(ClipMachine* mp,SQLROWSET* rs,int recs,ClipVar* eval,int every,ClipVar* ors){ PG_ROWSET* rowset = (PG_ROWSET*)rs; PG_STMT* stmt = rowset->stmt; int i,j,er = 0,len; void **rec; if(rowset->done) return 0; if(!recs) recs = 0x7fffffff; for(i=0;i<recs;i++){ if(rowset->loaded == rowset->lastrec) goto done; rec = calloc(rowset->nfields,sizeof(void*)); for(j=0;j<rowset->nfields;j++){ if(!PQgetisnull(stmt->res,rowset->loaded,j)){ len = PQgetlength(stmt->res,rowset->loaded,j); if(rowset->binary){ rec[j] = malloc(len+4); *((int*)(rec[j])) = len; memcpy(((char*)rec[j])+4, PQgetvalue(stmt->res,rowset->loaded,j),len); } else { rec[j] = malloc(len+1); memcpy(rec[j],PQgetvalue(stmt->res,rowset->loaded,j),len); ((char*)(rec[j]))[len] = 0; } } else { rec[j] = NULL; } } rowset->data[rowset->loaded] = rec; rowset->loaded++; if(eval && (eval->t.type == CCODE_t || eval->t.type == PCODE_t) && !(rowset->loaded % every)){ ClipVar var,*v; if(_clip_eval(mp,eval,1,ors,&var)){ _clip_destroy(mp,&var); er = 1; goto done; } v = _clip_vptr(&var); if(v->t.type == LOGICAL_t && !v->l.val){ _clip_destroy(mp,&var); goto done; } _clip_destroy(mp,&var); } } return 0; done: rowset->lastrec = rowset->loaded; rowset->done = 1; if(!rowset->lastrec){ rowset->bof = rowset->eof = 1; rowset->recno = 0; } _clip_destroy_c_item(mp,stmt->stmt_item,_C_ITEM_TYPE_SQL); return er; }