/** * \brief Read a signature from a file into an ::rs_signature_t structure * in memory. * * Once there, it can be used to generate a delta to a newer version of * the file. * * \note After loading the signatures, you must call * rs_build_hash_table() before you can use them. */ rs_job_t *rs_loadsig_begin(rs_signature_t **signature) { rs_job_t *job; job = rs_job_new("loadsig", rs_loadsig_s_magic); *signature = job->signature = rs_alloc_struct(rs_signature_t); job->signature->count = 0; return job; }
/** * \brief Apply a \ref gloss_delta to a \ref gloss_basis to recreate * the new file. * * This gives you back a ::rs_job_t object, which can be cranked by * calling rs_job_iter() and updating the stream pointers. When * finished, call rs_job_finish() to dispose of it. * * \param stream Contains pointers to input and output buffers, to be * adjusted by caller on each iteration. * * \param copy_cb Callback used to retrieve content from the basis * file. * * \param copy_arg Opaque environment pointer passed through to the * callback. * * \todo As output is produced, accumulate the MD4 checksum of the * output. Then if we find a CHECKSUM command we can check it's * contents against the output. * * \todo Implement COPY commands. * * \sa rs_patch_file() */ rs_job_t * rs_patch_begin(rs_copy_cb *copy_cb, void *copy_arg) { rs_job_t *job = rs_job_new("patch", rs_patch_s_header); job->copy_cb = copy_cb; job->copy_arg = copy_arg; rs_mdfour_begin(&job->output_md4); return job; }
/** \brief Set up a new encoding job. * * \sa rs_sig_file() */ rs_job_t * rs_sig_begin(size_t new_block_len, size_t strong_sum_len) { rs_job_t *job; job = rs_job_new("signature", rs_sig_s_header); job->block_len = new_block_len; assert(strong_sum_len > 0 && strong_sum_len <= RS_MD4_LENGTH); job->strong_sum_len = strong_sum_len; return job; }
/** * \brief Read a signature from a file into an ::rs_signature_t structure * in memory. * * Once there, it can be used to generate a delta to a newer version of * the file. * * \note After loading the signatures, you must call * rs_build_hash_table() before you can use them. */ rs_job_t *rs_loadsig_begin(rs_signature_t **signature, FILE *old_file) { rs_job_t *job; job = rs_job_new("loadsig", rs_loadsig_s_magic); *signature = job->signature = rs_alloc_struct(rs_signature_t); job->signature->count = 0; (*signature)->old_file = old_file; /* FILE *old_file = fopen(old_path, "rb"); fread(buf, 10, 1, old_file); printf("buf =\n%s\n", buf); printf("OOOOO\n"); */ return job; }
/** * Prepare to compute a streaming delta. */ rs_job_t *rs_delta_begin(rs_signature_t *sig) { rs_job_t *job; job = rs_job_new("delta", rs_delta_s_header); job->signature = sig; RollsumInit(&job->weak_sum); if ((job->block_len = sig->block_len) < 0) { rs_log(RS_LOG_ERR, "unreasonable block_len %d in signature", job->block_len); return NULL; } job->strong_sum_len = sig->strong_sum_len; if (job->strong_sum_len < 0 || job->strong_sum_len > RS_STRONG_SUM_LEN) { rs_log(RS_LOG_ERR, "unreasonable strong_sum_len %d in signature", job->strong_sum_len); return NULL; } return job; }