[MacPorts] #31742: rdiff-backup doesn't work.

MacPorts noreply at macports.org
Thu Oct 27 15:10:17 PDT 2011


#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


More information about the macports-tickets mailing list