int common_timer_destroy(common_timer_t **timer) { int joinRet; if (!timer) { error_s(AT, E_NULL_PARAMETER, E_MSG_NULL_PARAMETER, "timer"); return E_NULL_PARAMETER; } if (!(*timer)) { error_s(AT, E_NULL_PARAMETER, E_MSG_NULL_PARAMETER, "*timer"); return E_NULL_PARAMETER; } // para garantir que a thread está mesmo executando if ((*timer)->run) { // seta a flag pra acabar a thread e fica esperando ela acabar (*timer)->run = false; joinRet = pthread_join((*timer)->thread, NULL); if (joinRet != 0) { error_s(AT, E_PTHREAD_JOIN_ERROR, E_MSG_PTHREAD_JOIN_ERROR, joinRet); return joinRet; } } free(*timer); (*timer) = NULL; return E_OK; }
void * linkedList_last(linkedList_t *list) { if (!list) { error_s(AT, E_NULL_PARAMETER, "Parâmetro 'list' nulo."); return NULL; } if (list->size == 0) { error_s(AT, E_LINKED_LIST_EMPTY, "Lista vazia."); return NULL; } //list->actualElem = list->last; return list->last->content; }
void syserror(char *a) { char buf[ERRLEN]; if(!inerror){ inerror=TRUE; errstr(buf); dprint("%s: ", a); error_s(Eio, buf); } }
int w_cmd(File *f, Cmd *cp) { int fseq; fseq = f->seq; if(getname(f, cp->ctext, FALSE)==0) error(Enoname); if(fseq == seq) error_s(Ewseq, genc); writef(f); return TRUE; }
int common_sock_cleanup() { int r; #ifdef _MSC_VER r = WSACleanup(); // retorna zero se successo if (r != 0) { error_s(AT, E_SOCKET_WSACLEANUP, "Erro %d na chamada WSACleanup()", r); return r; // Retorna o erro do WSACleanup() } #endif return E_OK; }
int common_sock_startup() { #ifdef _MSC_VER WORD wVersionRequested; WSADATA wsaData; wVersionRequested = MAKEWORD(2,2); if (WSAStartup(wVersionRequested, &wsaData) != 0) { error_s(AT, E_SOCKET_WSASTARTUP, "Erro na chamada WSAStartup()"); return E_SOCKET_WSASTARTUP; } #endif return E_OK; }
common_timer_t * common_timer_create(int type, uint32_t time, int interval,int (*callback)(void *), void *param) { common_timer_t *timer; pthread_attr_t pthreadAttr; if (type != COMMON_TIMER_TYPE_FOREVER && type != COMMON_TIMER_TYPE_ONCE) { error_s(AT, E_INVALID_PARAMETER, E_MSG_INVALID_PARAMETER, "type"); return NULL; } if (!callback) { error_s(AT, E_NULL_PARAMETER, E_MSG_NULL_PARAMETER, "callback"); return NULL; } // aloca memória para o novo timer timer = (common_timer_t *)malloc(sizeof(common_timer_t)); if (!timer) { error_s(AT, E_INSUFFICIENT_MEMORY, E_MSG_INSUFFICIENT_MEMORY, "common_timer_t"); return NULL; } timer->timeLast = getTimestamp(); timer->type = type; timer->time = time; timer->interval = interval; timer->callback = callback; timer->callbackParam = param; timer->run = true; // inicia a thread de chamadas do timer pthread_attr_init(&pthreadAttr); pthread_attr_setdetachstate(&pthreadAttr, PTHREAD_CREATE_JOINABLE); pthread_create(&timer->thread, &pthreadAttr, common_timer_thread, (void *)timer); pthread_attr_destroy(&pthreadAttr); return timer; }
void writef(File *f) { Rune c; Posn n; char *name; int i, samename, newfile; ulong dev, qid; long mtime, appendonly, length; newfile = 0; samename = Strcmp(&genstr, &f->name) == 0; name = Strtoc(&f->name); i = statfile(name, &dev, &qid, &mtime, 0, 0); if(i == -1) newfile++; else if(samename && (f->dev!=dev || f->qid!=qid || f->date<mtime)){ f->dev = dev; f->qid = qid; f->date = mtime; warn_S(Wdate, &genstr); return; } if(genc) free(genc); genc = Strtoc(&genstr); if((io=create(genc, 1, 0666L)) < 0) error_s(Ecreate, genc); dprint("%s: ", genc); if(statfd(io, 0, 0, 0, &length, &appendonly) > 0 && appendonly && length>0) error(Eappend); n = writeio(f); if(f->name.s[0]==0 || samename) state(f, addr.r.p1==0 && addr.r.p2==f->nrunes? Clean : Dirty); if(newfile) dprint("(new file) "); if(addr.r.p2>0 && Fchars(f, &c, addr.r.p2-1, addr.r.p2) && c!='\n') warn(Wnotnewline); closeio(n); if(f->name.s[0]==0 || samename){ if(statfile(name, &dev, &qid, &mtime, 0, 0) > 0){ f->dev = dev; f->qid = qid; f->date = mtime; checkqid(f); } } }
void trytoclose(File *f) { char *t; char buf[256]; if(f == cmd) /* possible? */ return; if(f->deleted) return; if(f->state==Dirty && !f->closeok) { f->closeok = true; if(f->name.s[0]) { t = Strtoc(&f->name); strncpy(buf, t, sizeof buf-1); free(t); } else strcpy(buf, "nameless file"); error_s(Emodified, buf); } f->deleted = true; }