test_expect_success 'read greeting' '
echo HELLO >expect &&
test-line-buffer <<-\EOF >actual &&
- read 5
+ read 6
HELLO
EOF
test_cmp expect actual
'
test_expect_success '0-length read, send along greeting' '
- printf "%s\n" "" HELLO >expect &&
+ echo HELLO >expect &&
test-line-buffer <<-\EOF >actual &&
read 0
-
- copy 5
+ copy 6
HELLO
EOF
test_cmp expect actual
'
-test_expect_success 'buffer_read_string copes with trailing null byte' '
- echo >expect &&
+test_expect_success 'buffer_read_string copes with null byte' '
+ >expect &&
q_to_nul <<-\EOF | test-line-buffer >actual &&
- read 1
+ read 2
Q
EOF
test_cmp expect actual
'
-test_expect_success '0-length read, copy null byte' '
- printf "%s\n" "" Q | q_to_nul >expect &&
+test_expect_success 'skip, copy null byte' '
+ echo Q | q_to_nul >expect &&
q_to_nul <<-\EOF | test-line-buffer >actual &&
- read 0
-
- copy 1
+ skip 2
+ Q
+ copy 2
Q
EOF
test_cmp expect actual
'
test_expect_success 'long reads are truncated' '
- printf "%s\n" foo "" >expect &&
+ echo foo >expect &&
test-line-buffer <<-\EOF >actual &&
read 5
foo
test_expect_success 'long copies are truncated' '
printf "%s\n" "" foo >expect &&
test-line-buffer <<-\EOF >actual &&
- read 0
+ read 1
copy 5
foo
switch (*command) {
case 'c':
if (!prefixcmp(command, "copy ")) {
- buffer_copy_bytes(buf, strtouint32(arg) + 1);
+ buffer_copy_bytes(buf, strtouint32(arg));
return;
}
case 'r':
if (!prefixcmp(command, "read ")) {
const char *s = buffer_read_string(buf, strtouint32(arg));
- printf("%s\n", s);
- buffer_skip_bytes(buf, 1); /* consume newline */
+ fputs(s, stdout);
+ return;
+ }
+ case 's':
+ if (!prefixcmp(command, "skip ")) {
+ buffer_skip_bytes(buf, strtouint32(arg));
return;
}
default: