-rw-r--r-- | rsync/job.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/rsync/job.c b/rsync/job.c index 680982d..36f39f0 100644 --- a/rsync/job.c +++ b/rsync/job.c @@ -49,96 +49,97 @@ #include "stream.h" #include "util.h" #include "sumset.h" #include "job.h" #include "trace.h" static const int rs_job_tag = 20010225; static rs_result rs_job_work(rs_job_t *job, rs_buffers_t *buffers); rs_job_t * rs_job_new(char const *job_name, rs_result (*statefn)(rs_job_t *)) { rs_job_t *job; job = rs_alloc_struct(rs_job_t); job->job_name = job_name; job->dogtag = rs_job_tag; job->statefn = statefn; job->stats.op = job_name; rs_trace("start %s job", job_name); return job; } void rs_job_check(rs_job_t *job) { assert(job->dogtag == rs_job_tag); } rs_result rs_job_free(rs_job_t *job) { rs_bzero(job, sizeof *job); free(job); return RS_DONE; } static rs_result rs_job_s_complete(rs_job_t *job) { + job = job; rs_fatal("should not be reached"); return RS_INTERNAL_ERROR; } static rs_result rs_job_complete(rs_job_t *job, rs_result result) { rs_job_check(job); job->statefn = rs_job_s_complete; job->final_result = result; if (result != RS_DONE) { rs_error("%s job failed: %s", job->job_name, rs_strerror(result)); } else { rs_trace("%s job complete", job->job_name); } if (result == RS_DONE && !rs_tube_is_idle(job)) /* Processing is finished, but there is still some data * waiting to get into the output buffer. */ return RS_BLOCKED; else return result; } /** * \brief Run a ::rs_job_t state machine until it blocks * (::RS_BLOCKED), returns an error, or completes (::RS_COMPLETE). * * \return The ::rs_result that caused iteration to stop. * * \param ending True if there is no more data after what's in the * input buffer. The final block checksum will run across whatever's * in there, without trying to accumulate anything else. */ rs_result rs_job_iter(rs_job_t *job, rs_buffers_t *buffers) { rs_result result; rs_long_t orig_in, orig_out; orig_in = buffers->avail_in; orig_out = buffers->avail_out; result = rs_job_work(job, buffers); if (result == RS_BLOCKED || result == RS_DONE) |