static int fifo_process(Fifo *f) { ssize_t l; assert(f); errno = EIO; l = read(f->fd, ((uint8_t*) &f->buffer) + f->bytes_read, sizeof(f->buffer) - f->bytes_read); if (l <= 0) { if (errno == EAGAIN) return 0; return log_warning_errno(errno, "Failed to read from fifo: %m"); } f->bytes_read += l; assert(f->bytes_read <= sizeof(f->buffer)); if (f->bytes_read == sizeof(f->buffer)) { request_process(f->server, &f->buffer); f->bytes_read = 0; } return 0; }
int main(int argc, char const *argv[]) { list_t * colaboradores = NULL; list_t * retiradas = NULL; list_t * relatorio = list_blank_list(); node_t * node = NULL; colaborador_t * colaborador = NULL; retirada_t * retirada = NULL; char buffer[500]; unsigned int colaborador_id = 0; char * tipo_relatorio = NULL; request_t * request = NULL; response_t * response = response_empty(NULL); var_t * var = NULL; error_t error = ERROR_NULL; unsigned int user_id; unsigned char user_level; request_process(&request); login_info(request, &user_id, &user_level); if (user_level > ANONYMOUS) { node = request->GET->first; while (node != NULL) { var = (var_t *) node->data; if (strcmp(var->name, "por") == 0) { tipo_relatorio = var->value; } if (strcmp(var->name, "colaboradorid") == 0) { colaborador_id = atoi(var->value); } node = node->next; } colaboradores_load(&colaboradores, NULL); retiradas_load(&retiradas, NULL); if (strcmp(tipo_relatorio, "item") == 0) { process_report(&relatorio, retiradas, 0); login_refresh_session(&response, user_id, user_level); response_write_template(&response, "templates/header.html"); response_write_template(&response, "templates/relatorios_item.html"); if (relatorio->first == NULL) { response_write(&response, "<p>Não existe informações para serem exibidas</p>"); } else { response_write(&response, "<table class=\"table table-bordered table-striped\">" "<tr><th>Item</th><th>Retirado por</th><th>Data da última retirada</th>" "<th>Quantidade restante</th></tr>"); node = relatorio->first; while (node != NULL) { retirada = (retirada_t *) node->data; sprintf(buffer, "<tr><td>%s</td><td>%s</td><td>%s</td><td class=\"quantidade\">%u</td></tr>", retirada->item->nome, retirada->colaborador->nome, retirada->data, retirada->item->quantidade); response_write(&response, buffer); retirada_free(&retirada); node = node->next; } response_write(&response, "</table>"); } response_write(&response, "<script src=\"/js/relatorios.js\"></script>"); response_write_template(&response, "templates/footer.html"); } else if (strcmp(tipo_relatorio, "colaborador") == 0) { if (colaborador_id > 0) { process_report(&relatorio, retiradas, colaborador_id); } login_refresh_session(&response, user_id, user_level); response_write_template(&response, "templates/header.html"); response_write_template(&response, "templates/relatorios_colaborador.html"); if (colaborador_id > 0) { if (relatorio->first == NULL) { response_write(&response, "<p>Não existe informações para serem exibidas</p>"); } else { response_write(&response, "<table class=\"table table-bordered table-striped\">" "<tr><th>Item</th><th>Retirado por</th><th>Data da última retirada</th>" "<th>Quantidade restante</th></tr>"); node = relatorio->first; while (node != NULL) { retirada = (retirada_t *) node->data; sprintf(buffer, "<tr><td>%s</td><td>%s</td><td>%s</td><td class=\"quantidade\">%u</td></tr>", retirada->item->nome, retirada->colaborador->nome, retirada->data, retirada->item->quantidade); response_write(&response, buffer); retirada_free(&retirada); node = node->next; } response_write(&response, "</table>"); } } else { response_write(&response, "<p id=\"message\">Para ver o relatório selecione um colaborador acima e aperte \"Ver relatório\"</p>"); } response_write(&response, "<script>var colaboradores = ["); node = colaboradores->first; while (node != NULL) { colaborador = (colaborador_t *) node->data; sprintf(buffer, "{ id: %u, nome: \"%s\" },", colaborador->id, colaborador->nome); response_write(&response, buffer); colaborador_free(&colaborador); node = node->next; } response_write(&response, "];</script>"); response_write(&response, "<script src=\"/js/relatorios.js\"></script>"); response_write(&response, "<script src=\"/js/relatorios_colaborador.js\"></script>"); response_write_template(&response, "templates/footer.html"); } else { error = ERROR_RELATORIO_INVALIDO; } if (error != ERROR_NULL) { if (error == ERROR_RELATORIO_INVALIDO) { sprintf(buffer, "/cgi-bin/relatorios?por=item"); } else { sprintf(buffer, "/cgi-bin/relatorios?por=%s", tipo_relatorio); } error_page(&response, error, buffer); } } else { error_page(&response, ERROR_LOGIN_REQUIRED, "/"); } response_send(response); request_free(request); return 0; }
int main(int argc, char const *argv[]) { list_t * list = NULL; node_t * node = NULL; item_t * item = NULL; item_t * novo_item = NULL; char buffer[500]; request_t * request = NULL; response_t * response = response_empty(NULL); var_t * var = NULL; char * query = NULL; error_t error = ERROR_NULL; unsigned int user_id; unsigned char user_level; request_process(&request); login_info(request, &user_id, &user_level); if (user_level > ANONYMOUS) { node = request->GET->first; while (node != NULL) { var = (var_t *) node->data; if (strcmp(var->name, "q") == 0) { query = var->value; } node = node->next; } itens_load(&list, query); if (list->last != NULL) { item = (item_t *) list->last->data; last_id = item->id; } if (request->method == POST) { novo_item = form_process(request); if (novo_item != NULL) { if (novo_item->id == 0) { novo_item->id = ++last_id; list_add(list, novo_item); } else { node = list->first; while (node != NULL) { item = (item_t *) node->data; if (item->id == novo_item->id) { item->quantidade = novo_item->quantidade; item->fim_estoque = novo_item->fim_estoque; break; } node = node->next; } } itens_save(list); } else { error = ERROR_ITEM; } } if (error != ERROR_NULL) { error_page(&response, error, "/cgi-bin/itens"); } else { login_refresh_session(&response, user_id, user_level); response_write_template(&response, "templates/header.html"); response_write_template(&response, "templates/itens.html"); if (list->first == NULL) { response_write(&response, "<p>Nenhum item encontrado</p>"); } else { response_write(&response, "<table class=\"table table-bordered table-striped\">" "<tr><th>Id</th><th>Nome</th><th>Tipo</th><th>Descrição</th>" "<th>Quantidade</th><th>Previsão de fim de estoque</th>" "<th class=\"edit\">Ações</th></tr>"); node = list->first; while (node != NULL) { item = (item_t *) node->data; sprintf(buffer, "<tr><td>%u</td><td class=\"nome\">%s</td><td class=\"tipo\">%s</td>" "<td class=\"descricao\">%s</td><td class=\"quantidade\">%u</td>" "<td class=\"fimestoque\">%s</td><td class=\"edit\">" "<div class=\"btn-group\">" "<button class=\"btn edit-btn\" data-id=\"%u\"><i class=\"icon-pencil\"></i></button>" "</div>" "</td></tr>", item->id, item->nome, item->tipo, item->descricao, item->quantidade, item->fim_estoque, item->id); response_write(&response, buffer); item_free(&item); node = node->next; } response_write(&response, "</table>"); } response_write(&response, "<script src=\"/js/itens.js\"></script>"); response_write_template(&response, "templates/footer.html"); } } else { error_page(&response, ERROR_LOGIN_REQUIRED, "/"); } response_send(response); request_free(request); return 0; }