1.1 --- a/tests/dstest_pipe_client.cc Sat May 01 01:46:33 2021 +0200
1.2 +++ b/tests/dstest_pipe_client.cc Sat May 01 22:37:16 2021 +0200
1.3 @@ -26,33 +26,12 @@
1.4 #include <string.h>
1.5 #include <stdlib.h>
1.6
1.7 +#include <fsclient/client.h>
1.8 #include <fsclient/file.h>
1.9 #include <mem/memory_utils.h>
1.10
1.11
1.12
1.13 -static void show(file_t *file, offset_t step, offset_t sample)
1.14 -{
1.15 - /* Allocate a buffer for sampling from the file. */
1.16 -
1.17 - char buf[sample + 1];
1.18 -
1.19 - for (offset_t offset = 0; offset < file_populated_span(file); offset += step)
1.20 - {
1.21 - printf("show %ld of %ld...\n", offset, file_populated_span(file));
1.22 -
1.23 - unsigned long remaining = file_populated_span(file) - offset;
1.24 - unsigned long sample_remaining = remaining < sample ? remaining : sample;
1.25 -
1.26 - printf("%ld bytes from %p...\n", sample_remaining, (file->memory + offset));
1.27 - strncpy(buf, (file->memory + offset), sample_remaining);
1.28 - buf[sample_remaining] = '\0';
1.29 - printf("%s\n", buf);
1.30 - }
1.31 -}
1.32 -
1.33 -
1.34 -
1.35 const unsigned int PIPE_PAGES = 2;
1.36
1.37 int main(void)
1.38 @@ -74,45 +53,58 @@
1.39
1.40 /* Use the writer to fill the pipe with data. */
1.41
1.42 - for (int region = 0; region < 3; region++)
1.43 + offset_t size = 600;
1.44 + char buffer[size];
1.45 + int region = 0;
1.46 +
1.47 + for (int loop = 0; loop < 3; loop++)
1.48 {
1.49 - printf("Write %ld to pipe at %p...\n", file_span(&writer), writer.memory);
1.50 + while (1)
1.51 + {
1.52 + printf("Writing %ld to pipe...\n", size);
1.53
1.54 - memset(writer.memory, (int) 'a' + region, file_span(&writer));
1.55 + memset(buffer, (int) 'a' + region, size);
1.56 +
1.57 + offset_t nwritten = client_write(&writer, buffer, size);
1.58
1.59 - err = pipe_written(&writer, file_span(&writer));
1.60 + printf("Written %ld to pipe...\n", nwritten);
1.61 +
1.62 + for (offset_t i = 0; i < nwritten; i += 60)
1.63 + {
1.64 + fwrite(buffer + i, sizeof(char), nwritten - i > 60 ? 60 : nwritten - i, stdout);
1.65 + fputs("\n", stdout);
1.66 + }
1.67
1.68 - if (err)
1.69 - {
1.70 - printf("Written data error: %s\n", l4sys_errtostr(err));
1.71 - return 1;
1.72 + if (!nwritten)
1.73 + break;
1.74 +
1.75 + region++;
1.76 +
1.77 + if (region == 26)
1.78 + region = 0;
1.79 }
1.80
1.81 - show(&writer, page(1), 60);
1.82 + /* Use the reader to obtain data from the pipe. */
1.83
1.84 - err = pipe_next(&writer);
1.85 + offset_t nread;
1.86
1.87 - if (err)
1.88 + do
1.89 {
1.90 - printf("Region traversal error at region %d: %s\n", region, l4sys_errtostr(err));
1.91 - break;
1.92 - }
1.93 - }
1.94 + printf("Reading %ld from pipe...\n", size);
1.95 +
1.96 + nread = client_read(&reader, buffer, size);
1.97
1.98 - /* Use the reader to obtain data from the pipe. */
1.99 -
1.100 - err = pipe_current(&reader);
1.101 + printf("Read %ld from pipe...\n", nread);
1.102
1.103 - while (!err)
1.104 - {
1.105 - printf("show...\n");
1.106 - show(&reader, page(1), 60);
1.107 - err = pipe_next(&reader);
1.108 + for (offset_t i = 0; i < nread; i += 60)
1.109 + {
1.110 + fwrite(buffer + i, sizeof(char), nread - i > 60 ? 60 : nread - i, stdout);
1.111 + fputs("\n", stdout);
1.112 + }
1.113 + }
1.114 + while (nread);
1.115 }
1.116
1.117 - if (err)
1.118 - printf("Reading termination condition: %s\n", l4sys_errtostr(err));
1.119 -
1.120 printf("Data shown.\n");
1.121
1.122 return 0;