Index: ossp-pkg/sio/al.c RCS File: /v/ossp/cvs/ossp-pkg/sio/Attic/al.c,v rcsdiff -q -kk '-r1.38' '-r1.39' -u '/v/ossp/cvs/ossp-pkg/sio/Attic/al.c,v' 2>/dev/null --- al.c 2002/11/28 16:11:49 1.38 +++ al.c 2002/11/28 17:21:55 1.39 @@ -821,7 +821,8 @@ * */ al_rc_t -al_setlabel(al_t *al, size_t off, size_t n, al_label_t label) +al_setlabel(al_t *al, size_t off, size_t n, + al_label_t oldlabel, al_label_t newlabel) { al_rc_t rc; al_chunk_t *cur, *splitbuf; @@ -853,7 +854,8 @@ * then split chunk at offset, continue * with second half */ - if (AL_SAME_LABEL(cur, label)) { + if (!AL_SAME_LABEL(cur, oldlabel) || + AL_SAME_LABEL(cur, newlabel)) { len = AL_CHUNK_LEN(cur) - skip; n = n < len ? 0 : n - len; cur = NEXT(cur, chunks); @@ -876,7 +878,8 @@ */ while (n > 0 && cur != NULL) { len = AL_CHUNK_LEN(cur); - if (AL_SAME_LABEL(cur, label)) { + if (!AL_SAME_LABEL(cur, oldlabel) || + AL_SAME_LABEL(cur, newlabel)) { n = n < len ? 0 : n - len; } else { if (n < len) { @@ -890,7 +893,7 @@ cur = splitbuf; len = AL_CHUNK_LEN(cur); } - AL_CHUNK_LABEL(cur) = label; + AL_CHUNK_LABEL(cur) = newlabel; n -= len; } cur = NEXT(cur, chunks); Index: ossp-pkg/sio/al.h RCS File: /v/ossp/cvs/ossp-pkg/sio/Attic/al.h,v rcsdiff -q -kk '-r1.16' '-r1.17' -u '/v/ossp/cvs/ossp-pkg/sio/Attic/al.h,v' 2>/dev/null --- al.h 2002/11/28 16:11:49 1.16 +++ al.h 2002/11/28 17:21:55 1.17 @@ -71,7 +71,7 @@ al_rc_t al_traverse_cb (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_rc_t (*cb)(al_chunk_t *, void *), void *u); al_rc_t al_copy (al_t *al, size_t off, size_t n, al_label_t label, al_t *tal); al_rc_t al_splice (al_t *al, size_t off, size_t n, al_t *nal, al_t *tal); -al_rc_t al_setlabel (al_t *al, size_t off, size_t n, al_label_t label); +al_rc_t al_setlabel (al_t *al, size_t off, size_t n, al_label_t oldlabel, al_label_t newlabel); al_rc_t al_flatten (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, char *dst, size_t *lenp); al_rc_t al_firstlabel (al_t *al, size_t off, size_t n, al_td_t dir, al_label_t label, al_label_t *labelp); al_rc_t al_spanlabel (al_t *al, size_t off, size_t n, al_label_t label, size_t *offp, size_t *spanp); Index: ossp-pkg/sio/al.pod RCS File: /v/ossp/cvs/ossp-pkg/sio/Attic/al.pod,v rcsdiff -q -kk '-r1.16' '-r1.17' -u '/v/ossp/cvs/ossp-pkg/sio/Attic/al.pod,v' 2>/dev/null --- al.pod 2002/11/28 16:11:49 1.16 +++ al.pod 2002/11/28 17:21:55 1.17 @@ -272,11 +272,12 @@ The buffer now holds the string "HelloGoodbye\n". The insertion is empty. -=item al_rc_t B(al_t *I, size_t I, size_t I, al_label_t *label); +=item al_rc_t B(al_t *I, size_t I, size_t I, al_label_t oldlabel, al_label_t newlabel); I and I are byte counts that define a span of bytes within the -source assembly line I. These bytes are tagged with I