From 91144ad338649894e77e67ab0afeac0dd2d2ee6a Mon Sep 17 00:00:00 2001 From: peri4 Date: Thu, 4 Sep 2025 17:52:31 +0300 Subject: [PATCH 1/2] new PIFile::readAll test --- libs/main/io_devices/pifile.cpp | 16 ++++++++++++++++ libs/main/io_devices/pifile.h | 2 ++ main.cpp | 16 +++++++++++++--- 3 files changed, 31 insertions(+), 3 deletions(-) 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"); -- 2.43.0 From a299ada873f2d0967606977626ac47e417185b43 Mon Sep 17 00:00:00 2001 From: peri4 Date: Fri, 5 Sep 2025 21:46:44 +0300 Subject: [PATCH 2/2] PIFile::readAll release patch deploy_tool: ignore libc.so and take last dpkg dependency instead of first --- libs/main/io_devices/pifile.cpp | 31 +++---------------------------- libs/main/io_devices/pifile.h | 7 ++----- libs/main/system/pisysteminfo.cpp | 2 +- main.cpp | 7 ++++--- utils/deploy_tool/main.cpp | 20 ++++++++++++++++---- 5 files changed, 26 insertions(+), 41 deletions(-) diff --git a/libs/main/io_devices/pifile.cpp b/libs/main/io_devices/pifile.cpp index d9e99d31..9cf7df4f 100644 --- a/libs/main/io_devices/pifile.cpp +++ b/libs/main/io_devices/pifile.cpp @@ -252,32 +252,7 @@ llong PIFile::readAll(void * data) { } -PIByteArray PIFile::readAll(bool forceRead) { - PIByteArray a; - llong cp = pos(); - if (forceRead) { - seekToBegin(); - for (;;) { - uchar byte = static_cast(fgetc(PRIVATE->fd)); - if (feof(PRIVATE->fd) || ferror(PRIVATE->fd)) break; - a.push_back(byte); - } - seek(cp); - return a; - } - llong s = size(); - if (s < 0) return a; - a.resize(s); - seekToBegin(); - auto _r = fread(a.data(), 1, s, PRIVATE->fd); - NO_UNUSED(_r); - seek(cp); - if (s >= 0) a.resize(s); - return a; -} - - -PIByteArray PIFile::_readAll() { +PIByteArray PIFile::readAll() { if (!isOpened()) return {}; llong prev_pos = pos(); PIByteArray ret, buffer(4_KiB); @@ -647,10 +622,10 @@ bool PIFile::applyFileInfo(const PIString & path, const PIFile::FileInfo & info) } -PIByteArray PIFile::readAll(const PIString & path, bool forceRead) { +PIByteArray PIFile::readAll(const PIString & path) { PIFile f(path, PIIODevice::ReadOnly); if (!f.isOpened()) return PIByteArray(); - return f.readAll(forceRead); + return f.readAll(); } diff --git a/libs/main/io_devices/pifile.h b/libs/main/io_devices/pifile.h index 10552223..f33ff682 100644 --- a/libs/main/io_devices/pifile.h +++ b/libs/main/io_devices/pifile.h @@ -225,10 +225,7 @@ public: //! \~english Read all file content to byte array and return it. Position leaved unchanged //! \~russian Читает всё содержимое файла и возвращает его как массив байтов. Позиция остаётся неизменной - PIByteArray readAll(bool forceRead = false); - - PIByteArray _readAll(); - + PIByteArray readAll(); //! \~english Set file path to "path" and reopen file if need //! \~russian Устанавливает путь файла на "path" и переоткрывает его при необходимости @@ -297,7 +294,7 @@ public: //! \~english Read all file content at path "path" to byte array and return it. //! \~russian Читает всё содержимое файла по пути "path" и возвращает его как массив байтов. - static PIByteArray readAll(const PIString & path, bool forceRead = false); + static PIByteArray readAll(const PIString & path); //! \~english Clear file at path "path" and write "data", returns written bytes. //! \~russian Очищает файл по пути "path", пишет туда "data" и возвращает количество записанных байт. diff --git a/libs/main/system/pisysteminfo.cpp b/libs/main/system/pisysteminfo.cpp index ffd10192..dbf5fafe 100644 --- a/libs/main/system/pisysteminfo.cpp +++ b/libs/main/system/pisysteminfo.cpp @@ -234,7 +234,7 @@ PIString PISystemInfo::machineKey() { PISystemInfo * si = instance(); PIByteArray salt; PIString conf = confDir() + "/.pip_machine_salt"; - if (PIFile::isExists(conf)) salt = PIFile::readAll(conf, false); + if (PIFile::isExists(conf)) salt = PIFile::readAll(conf); if (salt.size_s() != SALT_SIZE) { salt = generateSalt(); PIFile::writeAll(conf, salt); diff --git a/main.cpp b/main.cpp index cdef9094..c3749e67 100644 --- a/main.cpp +++ b/main.cpp @@ -86,8 +86,9 @@ 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)); + auto fc = f.readAll(); + piCout << fc.size(); + if (!fc.isEmpty()) piCout << PIString::fromUTF8(fc.resized(32)); return 0; @@ -174,7 +175,7 @@ int main(int argc, char * argv[]) { // return 0; PIRegularExpression pire("(?:\\/\\/\\s*)?.*\\n?(?:\\bfunction\\b)\\s*(?\\b\\w+\\b)\\s*(?:\\((?[^;()]*?)\\))", PIRegularExpression::Multiline); - PIString subj = PIString::fromUTF8(PIFile::readAll("telegram.qs", false)); + PIString subj = PIString::fromUTF8(PIFile::readAll("telegram.qs")); piCout << "Pattern:" << pire.pattern(); piCout << "Valid:" << pire.isValid(); diff --git a/utils/deploy_tool/main.cpp b/utils/deploy_tool/main.cpp index 1485d3bf..7b0eef5b 100644 --- a/utils/deploy_tool/main.cpp +++ b/utils/deploy_tool/main.cpp @@ -463,11 +463,14 @@ bool procDpkg(const PIString & l) { fi.path = l; PIString cmd = dpkg + dpkgdir + " -S " + fi.name() + ign_err_suffix; // PICout(true) << cmd; - PIString vs = execute(cmd); + PIString vs = execute(cmd).trim(); if (!vs.isEmpty()) { - vs = vs.left(vs.find(":")); - if (!vs.isEmpty() && !vs.endsWith("-cross")) all_deps << vs; - return true; + PIStringList lines = vs.split('\n').reverse(); + for (auto l: lines) { + l = l.left(l.find(":")); + if (!l.isEmpty() && !l.endsWith("-cross")) all_deps << vs; + return true; + } } // piCout << "No dep on" << l; return false; @@ -787,7 +790,16 @@ int main(int argc, char * argv[]) { out_dir.replaceAll("/", "\\"); #endif PIVector clibs = all_libs.toVector(); + static PIStringList ignore_libs({"libc.so"}); for (auto l: clibs) { + bool ignore_lib = false; + for (auto il: ignore_libs) { + if (l.startsWith(il)) { + ignore_lib = true; + break; + } + } + if (ignore_lib) continue; PIFile::FileInfo fi; fi.path = l; #ifdef WINDOWS -- 2.43.0