diff --git a/libs/main/io_devices/pifile.cpp b/libs/main/io_devices/pifile.cpp index 42953eca..d9e99d31 100644 --- a/libs/main/io_devices/pifile.cpp +++ b/libs/main/io_devices/pifile.cpp @@ -22,6 +22,7 @@ #include "pidir.h" #include "piincludes_p.h" #include "piiostream.h" +#include "piliterals_bytes.h" #include "pitime_win.h" #include "pitranslator.h" #ifdef WINDOWS @@ -276,6 +277,21 @@ PIByteArray PIFile::readAll(bool forceRead) { } +PIByteArray PIFile::_readAll() { + if (!isOpened()) return {}; + llong prev_pos = pos(); + PIByteArray ret, buffer(4_KiB); + seekToBegin(); + for (;;) { + size_t readed = fread(buffer.data(), 1, buffer.size(), PRIVATE->fd); + if (readed == 0) break; + ret.append(buffer.data(), readed); + } + seek(prev_pos); + return ret; +} + + llong PIFile::size() const { if (isClosed()) return -1; llong s, cp = pos(); diff --git a/libs/main/io_devices/pifile.h b/libs/main/io_devices/pifile.h index 8f373499..10552223 100644 --- a/libs/main/io_devices/pifile.h +++ b/libs/main/io_devices/pifile.h @@ -227,6 +227,8 @@ public: //! \~russian Читает всё содержимое файла и возвращает его как массив байтов. Позиция остаётся неизменной PIByteArray readAll(bool forceRead = false); + PIByteArray _readAll(); + //! \~english Set file path to "path" and reopen file if need //! \~russian Устанавливает путь файла на "path" и переоткрывает его при необходимости diff --git a/main.cpp b/main.cpp index 2ef6ef8b..cdef9094 100644 --- a/main.cpp +++ b/main.cpp @@ -83,6 +83,14 @@ void piDeserializeJSON(S & v, const PIJSON & js) { PIKbdListener kbd; int main(int argc, char * argv[]) { + if (argc < 2) return 0; + PIFile f(argv[1], PIIODevice::ReadOnly); + piCout << "read" << f.path(); + auto fc = f._readAll(); + piCout << fc.size() << PIString::fromUTF8(fc.resized(32)); + return 0; + + PIHTTPServer server; server.listen({"127.0.0.1:7777"}); // server.setBasicAuthRealm("pip"); @@ -102,11 +110,13 @@ int main(int argc, char * argv[]) { }; // }); - reg("/*/3/get"); - reg("/*/{ID}/get"); + reg(" /*/a/get "); + reg(" /*/{ID}/get "); + reg(" /*/*/get "); + reg(" /*/*_b/get "); + reg("/api/{ID}/get"); reg("/api/1/get"); - server.unregisterPath("*/{ID}/get"); // reg("/api/1/bort{bortID}/get"); // reg("/api/**"); // reg("/api/1/bort2/get");