/* Print errors to stderr if occured. * Returns true if error occured and false in normally case. */ bool get_file_hash(u256_t hash, const char * filepath) { reader_state rs; u256_t message; if (open_reader(&rs, filepath)) { print_error(stderr, rs.err_msg); return rs.err; } hasher_state hs; init_hasher(&hs); do { int cnt = read_u256(&rs, message); if (cnt < 1) { if (!rs.err && rs.eof) { break; } // Ignore possible close errors. close_reader(&rs); print_error(stderr, rs.err_msg); return rs.err; } make_hasher_step(&hs, message, cnt); } while (!rs.eof); // As defined in GOST R 34.11-94. if (rs.filesize == 0) { make_hasher_step(&hs, message, 0u); } if (close_reader(&rs)) { print_error(stderr, rs.err_msg); return rs.err; } get_hash(hash, &hs); return rs.err; }
void process_command_connection(int con, int i2c_handle, bool verbose) { char request[256]; char *back; char response[256]; struct line_reader reader; init_line_reader(&reader, read_from_socket, BUFFER_SIZE, &con); while (1) { int result = read_line(&reader, request, sizeof(request)); if (result != 0) break; /* Get rid of any trailing \r or \n. */ back = request + strlen(request) - 1; while (back >= request && (*back == '\n' || *back == '\r')) *(back--) = 0; if (verbose) printf("Request: %s\n", request); if (strncmp("ping", request, 4) == 0) { process_ping_command(request, response, sizeof(response)); } else if (strncmp("get", request, 3) == 0) { process_get_command(request, i2c_handle, response, sizeof(response)); } else if (strncmp("set", request, 3) == 0) { process_set_command(request, i2c_handle, response, sizeof(response)); } else if (strncmp("addpoll", request, 7) == 0) { process_add_poll_command(request, response, sizeof(response)); } else if (strncmp("rmpoll", request, 5) == 0) { process_remove_poll_command(request, response, sizeof(response)); } else if (strncmp("help", request, 4) == 0) { process_help(request, response, sizeof(response)); } else { fprintf(stderr, "ERROR: unknown command\n"); strcpy(response, "ERROR\r\n"); } if (verbose) printf("Response: %s", response); result = send(con, response, strlen(response), MSG_NOSIGNAL); if (result != strlen(response)) { fprintf(stderr, "ERROR: Error writing to socket\n"); break; } } close_reader(&reader); }
void close_db(struct db *db) { close_logger(db->w); close_reader(db->r); free_bag(db->bag); }