|
26 | 26 | #include <capnp/schema.capnp.h>
|
27 | 27 | #include <capnp/serialize.h>
|
28 | 28 | #include <kj/debug.h>
|
| 29 | +#include <kj/filesystem.h> |
29 | 30 | #include <kj/io.h>
|
30 | 31 | #include <kj/string-tree.h>
|
31 | 32 | #include <kj/vector.h>
|
|
46 | 47 | #include "config.h"
|
47 | 48 | #endif
|
48 | 49 |
|
49 |
| -#if CAPNP_VERSION < 5000 |
50 |
| -#error "This version of capnpc-java requires Cap'n Proto version 0.5 or higher." |
| 50 | +#if CAPNP_VERSION < 7000 |
| 51 | +#error "This version of capnpc-java requires Cap'n Proto version 0.7.0 or higher." |
51 | 52 | #endif
|
52 | 53 |
|
53 | 54 | #ifndef VERSION
|
@@ -1760,9 +1761,7 @@ private:
|
1760 | 1761 | KJ_MAP(n, nestedTexts) { return kj::mv(n.outerTypeDef); }, indent);
|
1761 | 1762 |
|
1762 | 1763 | return NodeText {
|
1763 |
| - kj::strTree( |
1764 |
| - kj::mv(top.outerTypeDef), |
1765 |
| - KJ_MAP(n, nestedTexts) { return kj::mv(n.outerTypeDef); }), |
| 1764 | + kj::mv(top.outerTypeDef), |
1766 | 1765 |
|
1767 | 1766 | kj::strTree(
|
1768 | 1767 | kj::mv(top.readerBuilderDefs),
|
@@ -1931,42 +1930,19 @@ private:
|
1931 | 1930 |
|
1932 | 1931 | // -----------------------------------------------------------------
|
1933 | 1932 |
|
1934 |
| - void makeDirectory(kj::StringPtr path) { |
1935 |
| - KJ_IF_MAYBE(slashpos, path.findLast('/')) { |
1936 |
| - // Make the parent dir. |
1937 |
| - makeDirectory(kj::str(path.slice(0, *slashpos))); |
1938 |
| - } |
1939 |
| - |
1940 |
| - if (mkdir(path.cStr(), 0777) < 0) { |
1941 |
| - int error = errno; |
1942 |
| - if (error != EEXIST) { |
1943 |
| - KJ_FAIL_SYSCALL("mkdir(path)", error, path); |
1944 |
| - } |
1945 |
| - } |
1946 |
| - } |
| 1933 | + kj::Own<kj::Filesystem> fs = kj::newDiskFilesystem(); |
1947 | 1934 |
|
1948 | 1935 | void writeFile(kj::StringPtr filename, const kj::StringTree& text) {
|
1949 |
| - if (!filename.startsWith("/")) { |
1950 |
| - KJ_IF_MAYBE(slashpos, filename.findLast('/')) { |
1951 |
| - // Make the parent dir. |
1952 |
| - makeDirectory(kj::str(filename.slice(0, *slashpos))); |
1953 |
| - } |
1954 |
| - } |
1955 |
| - |
1956 |
| - int fd; |
1957 |
| - KJ_SYSCALL(fd = open(filename.cStr(), O_CREAT | O_WRONLY | O_TRUNC, 0666), filename); |
1958 |
| - kj::FdOutputStream out((kj::AutoCloseFd(fd))); |
1959 |
| - |
1960 |
| - text.visit( |
1961 |
| - [&](kj::ArrayPtr<const char> text) { |
1962 |
| - out.write(text.begin(), text.size()); |
1963 |
| - }); |
| 1936 | + const auto path = kj::Path::parse(filename); |
| 1937 | + auto file = fs->getCurrent().openFile(path, |
| 1938 | + kj::WriteMode::CREATE | kj::WriteMode::MODIFY | kj::WriteMode::CREATE_PARENT); |
| 1939 | + file->writeAll(text.flatten()); |
1964 | 1940 | }
|
1965 | 1941 |
|
1966 | 1942 | kj::MainBuilder::Validity run() {
|
1967 | 1943 | ReaderOptions options;
|
1968 | 1944 | options.traversalLimitInWords = 1 << 30; // Don't limit.
|
1969 |
| - StreamFdMessageReader reader(STDIN_FILENO, options); |
| 1945 | + StreamFdMessageReader reader(0, options); |
1970 | 1946 | auto request = reader.getRoot<schema::CodeGeneratorRequest>();
|
1971 | 1947 |
|
1972 | 1948 | for (auto node: request.getNodes()) {
|
|
0 commit comments