View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
0006508 | The Dark Mod | Coding | public | 26.03.2024 18:53 | 04.05.2025 22:32 |
Reporter | es20490446e | Assigned To | stgatilov | ||
Priority | normal | Severity | major | Reproducibility | always |
Status | new | Resolution | reopened | ||
Fixed in Version | TDM 2.14 | ||||
Summary | 0006508: tdm_installer: fails to build: missing include: cstdint | ||||
Description | With current build tools you have to explicitly import some standard C symbols, or the build fails. | ||||
Tags | build | ||||
Attached Files | error.txt (3,424 bytes)
compile: make: In file included from /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.cpp:1: /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:68:14: error: ‘uintmax_t’ in namespace ‘std’ does not name a type 68 | std::uintmax_t capacity; | ^~~~~~~~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:10:1: note: ‘std::uintmax_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? 9 | #include <system_error> +++ |+#include <cstdint> 10 | /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:69:14: error: ‘uintmax_t’ in namespace ‘std’ does not name a type 69 | std::uintmax_t free; | ^~~~~~~~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:69:9: note: ‘std::uintmax_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? 69 | std::uintmax_t free; | ^~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:70:14: error: ‘uintmax_t’ in namespace ‘std’ does not name a type 70 | std::uintmax_t available; | ^~~~~~~~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.h:70:9: note: ‘std::uintmax_t’ is defined in header ‘<cstdint>’; did you forget to ‘#include <cstdint>’? 70 | std::uintmax_t available; | ^~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.cpp: In function ‘stdext::space_info stdext::space(const path&)’: /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.cpp:205:13: error: ‘struct stdext::space_info’ has no member named ‘capacity’ 205 | res.capacity = stdres.capacity; | ^~~~~~~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.cpp:206:13: error: ‘struct stdext::space_info’ has no member named ‘free’ 206 | res.free = stdres.free; | ^~~~ /home/es20490446e/Documents/Projects/Ikigai/darkmod/darkmod-linux/_BUILD/1-workspace.../6-buildInstaller.../tdm_installer/zipsync/StdFilesystem.cpp:207:13: error: ‘struct stdext::space_info’ has no member named ‘available’ 207 | res.available = stdres.available; | ^~~~~~~~~ make[2]: *** [zipsync/CMakeFiles/libzipsyncextra.dir/build.make:76: zipsync/CMakeFiles/libzipsyncextra.dir/StdFilesystem.cpp.o] Error 1 make[1]: *** [CMakeFiles/Makefile2:155: zipsync/CMakeFiles/libzipsyncextra.dir/all] Error 2 make: *** [Makefile:91: all] Error 2 ✗ 1 | ||||
Please add this fix. | |
Please include this fix. It's just one line. | |
Hopefully fixed in svn rev 10995... | |
Let me test... | |
@stgatilov The bug is still there. Correct: https://gitlab.com/es20490446e/darkmod-linux/-/raw/master/patches/buildDevelWorkspace/darkmod_src/tdm_installer/zipsync/StdFilesystem.h?ref_type=heads Incorrect: https://svn.thedarkmod.com/publicsvn/darkmod_src/trunk/tdm_installer/zipsync/StdFilesystem.h |
|
Still there. | |
And what is the new error BTW? | |
The compiler complains that you have to explicitly "#include <cstdint>". | |
Okay, added the include in svn rev 10999. | |
Testing... | |
At: tdm_installer/zipsync You also have to add: #include <cstdint> To: - Downloader.h - Utils.h - ZipUtils.h Downloader.h (5,600 bytes)
#pragma once #include <limits.h> #include <cstdint> #include <functional> #include <map> #include <memory> #include <string> #include <vector> typedef void CURL; namespace ZipSync { /** * A chunk of data which we want to download */ struct DownloadSource { //URL to download file from std::string url; //the range of bytes to be downloaded //byterange[1] == UINT_MAX means: download whole file of unknown size uint32_t byterange[2]; DownloadSource(); DownloadSource(const std::string &url); //download whole file DownloadSource(const std::string &url, uint32_t from, uint32_t to); //download range of file }; //called when download is complete typedef std::function<void(const void*, uint32_t)> DownloadFinishedCallback; //called during download to report progress: returning nonzero value interrupts download typedef std::function<int(double, const char*)> GlobalProgressCallback; /** * Smart downloader over HTTP protocol. * Utilizes byteranges and multipart byteranges requests to download many chunks quickly. * On a problematic network, can split download into many small pieces to cope with occasional timeouts. */ class Downloader { bool _silentErrors = false; std::unique_ptr<std::string> _useragent; bool _blockMultipart = false; GlobalProgressCallback _progressCallback; //user-specified chunk of data to be downloaded struct Download { DownloadSource src; DownloadFinishedCallback finishedCallback; std::vector<uint8_t> resultData; //temporary storage (used in case download is split) int64_t progressSize = 0; //estimated size in bytes (for progress indicator) }; std::vector<Download> _downloads; //state of one remote file processed //usually contains several user-specified "Download"-s struct UrlState { std::vector<int> downloadsIds; //indices in _downloads (sorted by starting offset) int doneCnt = 0; //how many FULL downloads done uint32_t doneBytesNext = 0; //how many bytes done in the current download int speedProfile = 0; //index in SPEED_PROFILES }; std::map<std::string, UrlState> _urlStates; //designates user-specified "Download" or a piece of it //every HTTP request contains one or several SubTasks struct SubTask { int downloadIdx; //index in _downloads uint32_t byterange[2]; //can be part of download's byterange }; //state of the HTTP request currently active struct CurlResponse { std::string url; std::vector<uint8_t> data; //downloaded file data is appended to here uint32_t totalSize = UINT_MAX; //size of file as reported by HTTP header (used for whole-file downloads) uint32_t onerange[2] = {UINT_MAX, UINT_MAX}; //byterange actually provided by HTTP server (may differ from what we asked for) std::string boundary; //boundary between responses in multipart response double progressRatio = 0.0; //which portion of this CURL request is done int64_t bytesDownloaded = 0; //how many bytes actually downloaded (as reported by CURL) double progressWeight = 0.0; //this request size / total size of all downloads }; std::unique_ptr<CurlResponse> _currResponse; double _totalProgress = 0.0; //which portion of DownloadAll is complete (without current request) int64_t _totalBytesDownloaded = 0; //how many bytes downloaded in total (without current request) std::unique_ptr<CURL, void (*)(CURL*)> _curlHandle; //CURL handle reused between request in order to exploit connection pool int _curlRequestIdx = 0; //sequental number of HTTP request (used for logging curl commands) public: ~Downloader(); Downloader(); //schedule download of specified chunk of data //the obtained data will be passed to the specified callback when it is available void EnqueueDownload(const DownloadSource &source, const DownloadFinishedCallback &finishedCallback); //progress callback is useful for two things: // * showing progress indicator to user (use passed argument) // * allowing user to interrupt download (return nonzero value) void SetProgressCallback(const GlobalProgressCallback &progressCallback); // * silent == false: throw exception on any error up to the caller, stopping the whole run // * silent == true: just don't call callback function for failed requests (grouped by url), no stopping, no exception void SetErrorMode(bool silent); //set user-agent to be put into HTTP request void SetUserAgent(const char *useragent); //blocked = true: only use ordinary byterange requests, never use multipart ones void SetMultipartBlocked(bool blocked); //when everything is set up, call this method to actually perform all downloads //it blocks until the job is done (progress callback is the only way to interrupt it) void DownloadAll(); //returns total number of bytes downloaded by this object //(as reported by CURL) int64_t TotalBytesDownloaded() const { return _totalBytesDownloaded; } private: void DownloadAllForUrl(const std::string &url); bool DownloadOneRequest(const std::string &url, const std::vector<SubTask> &subtasks, int lowSpeedTime, int connectTimeout); void BreakMultipartResponse(const CurlResponse &response, std::vector<CurlResponse> &parts); int UpdateProgress(); }; } Utils.h (1,027 bytes)
#pragma once #include <cstdint> #include <memory> #include <string> #include <vector> namespace ZipSync { static const int SIZE_PATH = 4<<10; static const int SIZE_FILEBUFFER = 64<<10; static const int SIZE_LINEBUFFER = 16<<10; template<class T> void AppendVector(std::vector<T> &dst, const std::vector<T> &src) { dst.insert(dst.end(), src.begin(), src.end()); } typedef std::unique_ptr<FILE, int (*)(FILE*)> StdioFileUniquePtr; /** * RAII wrapper around FILE* from stdio.h. * Automatically closes file on destruction. */ class StdioFileHolder : public StdioFileUniquePtr { public: StdioFileHolder(FILE *f); StdioFileHolder(const char *path, const char *mode); //checks that file is opened successfully ~StdioFileHolder(); StdioFileHolder(StdioFileHolder&&) = default; StdioFileHolder& operator=(StdioFileHolder&&) = default; operator FILE*() const { return get(); } }; std::vector<uint8_t> ReadWholeFile(const std::string &filename); int GetFileSize(const std::string &filename); } ZipUtils.h (2,802 bytes)
#pragma once #include "Logging.h" #include <minizip/unzip.h> #include <minizip/zip.h> #include <cstdint> #include <memory> #include <vector> namespace ZipSync { typedef std::unique_ptr<std::remove_pointer<unzFile>::type, int (*)(unzFile)> UnzFileUniquePtr; /** * RAII wrapper around unzFile from minizip.h. * Automatically closes file on destruction. */ class UnzFileHolder : public UnzFileUniquePtr { public: UnzFileHolder(unzFile zf); UnzFileHolder(const char *path); ~UnzFileHolder(); operator unzFile() const { return get(); } }; typedef std::unique_ptr<std::remove_pointer<zipFile>::type, int (*)(zipFile)> ZipFileUniquePtr; /** * RAII wrapper around zipFile from minizip.h. * Automatically closes file on destruction. */ class ZipFileHolder : public ZipFileUniquePtr { public: ZipFileHolder(zipFile zf); ZipFileHolder(const char *path); ~ZipFileHolder(); operator zipFile() const { return get(); } }; /** * Performs whatever call you wrap into it and checks its return code. * If the return code is nonzero, then exception is thrown. */ #define SAFE_CALL(...) \ do { \ int mz_errcode = __VA_ARGS__; \ if (mz_errcode != 0) g_logger->errorf(lcMinizipError, "Minizip error %d", mz_errcode); \ } while (0) //note: file must be NOT opened void unzGetCurrentFilePosition(unzFile zf, uint32_t *localHeaderStart, uint32_t *fileDataStart, uint32_t *fileDataEnd); class UnzFileIndexed { struct Entry { uint32_t byterangeStart; unz_file_pos unzPos; bool operator< (const Entry &b) const; }; UnzFileUniquePtr _zfHandle; std::vector<Entry> _sortedEntries; public: ~UnzFileIndexed(); UnzFileIndexed(); UnzFileIndexed(UnzFileIndexed &&) = default; operator unzFile() const { return _zfHandle.get(); } void Clear(); void Open(const char *path); void LocateByByterange(uint32_t start, uint32_t end); }; /* //like unzLocateFile, but also checks exact match by byterange (which includes local file header) bool unzLocateFileAtBytes(unzFile zf, const char *filename, uint32_t from, uint32_t to); */ void minizipCopyFile(unzFile zf, zipFile zfOut, const char *filename, int method, int flags, uint16_t internalAttribs, uint32_t externalAttribs, uint32_t dosDate, bool copyRaw, uint32_t crc, uint32_t contentsSize); struct FileAttribInfo { uint32_t offset; uint32_t externalAttribs; uint16_t internalAttribs; }; //given a tightly packed zip file without central directory, rebuilds it and appends it to the end of file void minizipAddCentralDirectory(const char *filename, std::vector<FileAttribInfo> attribs = {}); //repack given zip file so that it gets accepted by ZipSync void minizipNormalize(const char *srcFilename, const char *dstFilename = NULL); } |
|
Date Modified | Username | Field | Change |
---|---|---|---|
26.03.2024 18:53 | es20490446e | New Issue | |
26.03.2024 18:53 | es20490446e | File Added: error.txt | |
26.03.2024 18:53 | es20490446e | File Added: fix.zip | |
09.04.2024 18:43 | Fiver | Tag Attached: build | |
01.09.2024 00:31 | es20490446e | Note Added: 0016821 | |
25.03.2025 03:08 | es20490446e | Note Added: 0016996 | |
27.04.2025 08:27 | stgatilov | Note Added: 0017010 | |
27.04.2025 08:27 | stgatilov | Assigned To | => stgatilov |
27.04.2025 08:27 | stgatilov | Status | new => resolved |
27.04.2025 08:27 | stgatilov | Resolution | open => fixed |
27.04.2025 08:27 | stgatilov | Fixed in Version | => TDM 2.14 |
27.04.2025 12:35 | es20490446e | Note Added: 0017014 | |
29.04.2025 17:56 | es20490446e | Note Added: 0017015 | |
29.04.2025 17:58 | es20490446e | Status | resolved => feedback |
29.04.2025 17:58 | es20490446e | Resolution | fixed => reopened |
29.04.2025 17:58 | es20490446e | Note Added: 0017016 | |
29.04.2025 17:59 | es20490446e | Status | feedback => new |
29.04.2025 17:59 | es20490446e | Resolution | reopened => open |
01.05.2025 16:17 | stgatilov | Note Added: 0017018 | |
01.05.2025 16:27 | es20490446e | Note Added: 0017019 | |
04.05.2025 09:08 | stgatilov | Note Added: 0017021 | |
04.05.2025 09:08 | stgatilov | Status | new => resolved |
04.05.2025 09:08 | stgatilov | Resolution | open => fixed |
04.05.2025 21:28 | es20490446e | Note Added: 0017022 | |
04.05.2025 22:32 | es20490446e | Note Added: 0017023 | |
04.05.2025 22:32 | es20490446e | File Added: Downloader.h | |
04.05.2025 22:32 | es20490446e | File Added: Utils.h | |
04.05.2025 22:32 | es20490446e | File Added: ZipUtils.h | |
04.05.2025 22:32 | es20490446e | Status | resolved => new |
04.05.2025 22:32 | es20490446e | Resolution | fixed => reopened |