#31742: rdiff-backup doesn't work. --------------------------+------------------------------------------------- Reporter: mzch@… | Owner: perry@… Type: defect | Status: new Priority: Normal | Milestone: Component: ports | Version: 2.0.3 Keywords: | Port: rdiff-backup --------------------------+------------------------------------------------- Comment(by mzch@…): Hi, Librsync 0.9.8 causes this issue. In delta.c all _rs_append* functions are defined as inline, so those symbols are lost in librsync.dynlib. The following log is a symbol table of delta.o (include rs_append* functions). Somehow, rs_appendflush is listed. {{{ 0000000000000918 s EH_frame0 000000000000071a s L_.str 000000000000072f s L_.str1 00000000000008eb s L_.str10 0000000000000756 s L_.str2 0000000000000794 s L_.str3 00000000000007b8 s L_.str4 000000000000080b s L_.str5 0000000000000844 s L_.str6 0000000000000883 s L_.str7 00000000000008a6 s L_.str8 00000000000008c0 s L_.str9 0000000000000897 s L___FUNCTION__.rs_appendflush 0000000000000720 s L___FUNCTION__.rs_delta_begin 0000000000000872 s L___FUNCTION__.rs_delta_s_flush 0000000000000782 s L___FUNCTION__.rs_delta_s_header 0000000000000834 s L___FUNCTION__.rs_delta_s_scan 00000000000007fa s L___FUNCTION__.rs_delta_s_slack 00000000000008de s L___FUNCTION__.rs_findmatch U _RollsumUpdate U _abort U _rs_appendflush 0000000000000040 T _rs_delta_begin 0000000000000958 S _rs_delta_begin.eh 00000000000004b0 t _rs_delta_s_end 0000000000000a00 s _rs_delta_s_end.eh 00000000000004c0 t _rs_delta_s_flush 0000000000000a28 s _rs_delta_s_flush.eh 00000000000000c0 t _rs_delta_s_header 0000000000000980 s _rs_delta_s_header.eh 0000000000000140 t _rs_delta_s_scan 00000000000009a8 s _rs_delta_s_scan.eh 0000000000000430 t _rs_delta_s_slack 00000000000009d8 s _rs_delta_s_slack.eh U _rs_emit_delta_header U _rs_emit_end_cmd U _rs_emit_literal_cmd 0000000000000000 T _rs_getinput 0000000000000930 S _rs_getinput.eh U _rs_job_check U _rs_job_input_is_ending U _rs_job_new U _rs_log0 U _rs_outbuflen 0000000000000a58 S _rs_roll_paranoia U _rs_scoop_input U _rs_scoop_total_avail U _rs_search_for_block U _rs_tube_catchup U _rs_tube_copy }}} I don't understand why inline function is listed in the symbol table, but I applied the following dirty-hack and made sure to fix this issue. {{{ --- delta.c.orig 2011-10-28 07:04:32.000000000 +0900 +++ delta.c 2011-10-28 07:05:08.000000000 +0900 @@ -254,7 +254,7 @@ * forwards beyond the block boundaries. Extending backwards would require * decrementing scoop_pos as appropriate. */ -inline int rs_findmatch(rs_job_t *job, rs_long_t *match_pos, size_t *match_len) { +int rs_findmatch(rs_job_t *job, rs_long_t *match_pos, size_t *match_len) { /* calculate the weak_sum if we don't have one */ if (job->weak_sum.count == 0) { /* set match_len to min(block_len, scan_avail) */ @@ -281,7 +281,7 @@ /** * Append a match at match_pos of length match_len to the delta, extending * a previous match if possible, or flushing any previous miss/match. */ -inline rs_result rs_appendmatch(rs_job_t *job, rs_long_t match_pos, size_t match_len) +rs_result rs_appendmatch(rs_job_t *job, rs_long_t match_pos, size_t match_len) { rs_result result=RS_DONE; @@ -312,7 +312,7 @@ * * This also breaks misses up into block_len segments to avoid accumulating * too much in memory. */ -inline rs_result rs_appendmiss(rs_job_t *job, size_t miss_len) +rs_result rs_appendmiss(rs_job_t *job, size_t miss_len) { rs_result result=RS_DONE; @@ -329,7 +329,7 @@ /** * Flush any accumulating hit or miss, appending it to the delta. */ -inline rs_result rs_appendflush(rs_job_t *job) +rs_result rs_appendflush(rs_job_t *job) { /* if last is a match, emit it and reset last by resetting basis_len */ if (job->basis_len) { @@ -360,7 +360,7 @@ * scoop_pos appropriately. In the future this could be used for something * like context compressing of miss data. Note that it also calls * rs_tube_catchup to output any pending output. */ -inline rs_result rs_processmatch(rs_job_t *job) +rs_result rs_processmatch(rs_job_t *job) { job->scoop_avail-=job->scoop_pos; job->scoop_next+=job->scoop_pos; @@ -382,7 +382,7 @@ * * In the future this could do compression of miss data before outputing * it. */ -inline rs_result rs_processmiss(rs_job_t *job) +rs_result rs_processmiss(rs_job_t *job) { rs_tube_copy(job, job->scoop_pos); job->scoop_pos=0; }}} -- Ticket URL: <https://trac.macports.org/ticket/31742#comment:2> MacPorts <http://www.macports.org/> Ports system for Mac OS