static int _check(struct pinfo *pinfo, int len, char *path) { char query[PATH_SIZE + 3]; struct master_db *db; int ret; db = _master_db_open(pinfo->common.lms->db_path); if (!db) return -1; if (_is_file(path)) memcpy(query, path, len + 1); else { memcpy(query, path, len); memcpy(query + len, "/%", sizeof("/%")); len += sizeof("/%") - 1; } ret = lms_db_get_files(db->get_files, query, len); if (ret != 0) goto end; ret = lms_db_update_id_get(db->handle); if (ret < 0) { fprintf(stderr, "ERROR: could not get global update id.\n"); goto end; } pinfo->common.update_id = ret + 1; if (lms_create_slave(pinfo, _slave_work) != 0) { ret = -2; goto end; } _init_sync_wait(pinfo, 1); ret = _db_files_loop(db, (struct cinfo *)pinfo, _check_row); _master_send_finish(&pinfo->master); _init_sync_wait(pinfo, 0); lms_finish_slave(pinfo, _master_dummy_send_finish); end: lms_db_reset_stmt(db->get_files); _master_db_close(db); return ret; }
static int _check_single_process(struct sinfo *sinfo, int len, char *path) { struct single_process_db *db; char query[PATH_SIZE + 2]; void **parser_match = NULL; lms_t *lms; int ret; lms = sinfo->common.lms; db = _single_process_db_open(lms->db_path); if (!db) return -1; if (_is_file(path)) memcpy(query, path, len + 1); else { memcpy(query, path, len); memcpy(query + len, "/%", sizeof("/%")); len += sizeof("/%") - 1; } ret = lms_db_get_files(db->get_files, query, len); if (ret != 0) goto end; if (lms_parsers_setup(lms, db->handle) != 0) { fprintf(stderr, "ERROR: could not setup parsers.\n"); ret = -2; goto end; } if (lms_parsers_start(lms, db->handle) != 0) { fprintf(stderr, "ERROR: could not start parsers.\n"); ret = -3; goto end; } if (lms->n_parsers < 1) { fprintf(stderr, "ERROR: no parser could be started, exit.\n"); ret = -4; goto end; } parser_match = malloc(lms->n_parsers * sizeof(*parser_match)); if (!parser_match) { perror("malloc"); ret = -5; goto end; } ret = lms_db_update_id_get(db->handle); if (ret < 0) { fprintf(stderr, "ERROR: could not get global update id.\n"); goto end; } sinfo->common.update_id = ret + 1; sinfo->parser_match = parser_match; lms_db_begin_transaction(db->transaction_begin); ret = _db_files_loop(db, (struct cinfo *)sinfo, _check_row_single_process); /* Check only if there are remaining commits to do */ if (sinfo->commit_counter) { sinfo->total_committed += sinfo->commit_counter; lms_db_update_id_set(db->handle, sinfo->common.update_id); } lms_db_end_transaction(db->transaction_commit); end: free(parser_match); lms_parsers_finish(lms, db->handle); lms_db_reset_stmt(db->get_files); _single_process_db_close(db); return ret; }
bool fs_t::is_file(const std::string& path) const { return _is_file(canocial(path).c_str()); }