i think this do {} block is just confusing the flow.  why not do a simple set of checks, like

if (src < 0 && dst >= 0) {
   blah; err = 0;
   goto reply;
}