This PR it just a hack to fix#1160 , it doesn't solve the underlying
problem.
It fixes the problem because by using execvp() directly, it avoids the
call to `sh` done with `system()`, which has a bug on Ubuntu 22.04 which
makes it i,compatibles with the glibc inside the AppImage.
It doesn't fix the underlying problem because the programs we call
themselves still link to the AppImage's libraries instead of the system
ones.
### Problem description
Currently, the providers use the method `isSavable()` to determine both
if they can use "Save" or "Save as".
This behaviour is problematic because some providers may need to be
saveable but not saveable as: for example the view provider. The
original provider may not allow to be saved.
### Implementation description
I separate these two behaviour by creating another function:
`isDumpable()`, that return true by default but can be overridden by the
provider to return false, if the provider should not be dumped in any
way.
### Additional things
While I was at it, I also marked "export" operations as needing the
"dumpable" flag. That way, we can't accidentally export the whole
address space of a process as base64.
I also added documentation for these some functions in Provider
This PR fixes some things about crash handling:
- when the terminate handler is called, immediately set it back to the
original one, so can't make a recursion if the crash-handling code fails
- Only save projects if the crash occured after Imhex finished startup
- do not update the project location when saving the crash backup file:
this will remove problems when `EventAbnormalTermination` is called
before `crashCallback()`
I also added a bit more documentation
In order to do this I add to make some other additions :
- Add a warning popup (TODO, maybe add some icons to differentiate
error/warning popups in a future PR ?)
- create showError() and showWarning() functions, as helpers to show a
message both to the logs and as a popup
This PR updates imgui and its dependencies from the last time, ~1 year
ago
(deabacbd50)
Commits will be refactored before merging
Things you might ask :
- why did you remove `ImGui_ImplGlfw_SetBorderlessWindowMode()` ?
-> Where is it used ? The only usage of it I see is commented
(cb9a3b1f55/lib/external/imgui/source/imgui_impl_glfw.cpp (L757))
- why did you remove the implot anti aliasing flag ?
-> They.. seem to have removed it altogether ?
https://github.com/epezent/implot/issues/479
This PR does two things :
- save opened projects as recent entries
- refactor stuff about recent entries in a separate file. The reason is
that I felt like welcome_screen.cpp was really big ( 685 lines before
this, 500 now). What do you think ?
---------
Co-authored-by: Nik <werwolv98@gmail.com>
- Add a new file 'crash.json' to store metadata about the crash, like
the log file or project opened
- show the log file of the session that caused the crash to the user
- Correctly restore the project path
Compiler when compiling doesn't use them in those cases and emit a
warning, which is turned into an error by `-Werror`. Unfortunately,
CPack doesn't expose the logic it uses for stripping binaries.
I just realized one feature request existed about this tool and have
added a comment to it referring this pr. Errors and additions are
described in the fork commit already. I'm not sure if I should repeat
them here again. I have tested the changes thoroughly, but it is always
possible some fringe case was not tested and is incorrect. The tests
were done using the many similar online calculators for IEEE 754
floating point formats.
IEEE 745 floating point tool redesign modeled after 'float toy' web app
(http://evanw.github.io/float-toy/)
Streamlined output using colors and compact layout which can be further
simplified.
Chosen display mode (detailed or simplified) is automatically saved and
set on new sessions.
Edit the binary bits, the integer hexadecimal or the floating point
decimal values and the entire app will update with the change.
Supports the main IEEE745 standard formats (half, single and double
precision) together with custom formats of size <= 64 bits.
Each format choice uses and displays the number of significant decimal
digits defined by the mantissa size.
Added labels to identify the location of each bit box inside the binary
representation.
Satisfies round trip / idempotent (reproducing) conversion property
Added theme colors, radio buttons for display mode and a clear button
that resets the tool.
Removed previously and incorrectly added locale translation to various
labels and languages
Attempted to adhere to code style formatting using existing code as
example.
An effort was made to use preferred variable types and functions from
std namespace when appropriate.
Attempted to document code using comments.
Not implemented / left to complete at an later time
Arbitrary width and precision formats.
Extended precision formats.
Shortest string property.
hexadecimal floating point display and conversions.
This PR adds some documentation. It's actually pretty random, I followed
the function calls I was curious about and commented whenever I wasn't
sure/I thought it needed clarification
You might want to make sure to squash them, because the commits are kind
of a mess, I didn't went through the effort of interactive rebase
Currently there is no way to save the pattern code progamically from a
plugin unless the builtin plugin is modified to add those events. This
pull request will be adding ability to load and save pattern code from
specified file.
This PR handles errors that NFD might encounter (both in Init() and the
other method to open the dialog), and log them in the logs and in the
GUI
This (among other) fix the crash I had running ImHex as root and opening
a file
This pull request changes Config Directories on Linux to only include
the XDG_CONFIG_HOME directory, as opposed to all directories in
XDG_DATA_DIRS before (introduced in
https://github.com/WerWolv/ImHex/pull/644/files#diff-c1a4d2b63fed168a9a3568944e9cadeae096f2ddcec3649e4a9b2d29fd104be0L162-L166).
Reasons:
- This changes the location of the config file to the standard directory
meant for configurations
- This prevents the config file from being read/written in system
locations, like /usr/share
This PR also includes a migration task that will run on Linux and move
config/GUI dimensions to the new directory
as a bonus, as discussed on discord, it writes the logs to a Data
directory instead of a Config directory
PR title is self explaining
I may modify other providers implementations to display a detailed error
message later
I'm not sure how to deal with other locales because the format changed.
Before, I had to add and comment the key in all locale files, now I'm
not so sure.
Issue: https://github.com/WerWolv/ImHex/issues/522
Implementation of chunk based entropy analysis in diagram.hpp available
from the data information view and in the pattern language.
---------
Co-authored-by: WerWolv <werwolv98@gmail.com>
* feat: Added simple stack trace output
* feat: Added backtrace wrapper
* build: Added libbacktrace include dirs to build
* build: Fixed libbacktrace variables
* build: More backtrace variable fixes
* build: Try to find backtrace include
* build: Get backtrace header from cmake script
* feat: Added backtrace support for execinfo
* feat: Added support for StackWalk on Windows
* clear project context when closing all providers
* Show project name on window title
* refactor RequestChangeWindowTitle to RequestUpdateWindowTitle
* add spaces
* Tell the user the net request which failed
* Show signal name
* Print execution time of startup tasks
* replace NULL with nullptr
* change wording for task logs
* Remove '..' from task name
* remove using namespace chrono
* add error message for the file picker
* set a different message for Windows/MacOS
* fix typos
* Moved file dialog error handling to a callback function
Co-authored-by: Nik <werwolv98@gmail.com>
* Added option to bundle CA
* use bundled CA for AppImage
* Fix bundled CA not working on Linux
* revert change to add null terminated string
* set IMHEX_USE_BUNDLED_CA to ON on Windows
* feat: Initial implementation of an Intel Hex provider
* fix: Reading of bytes from intel hex files
* lang: Added localization for new provider
* ui: Only show file name in intel hex provider name
* feat: Added Motorola SREC provider
* sys: Initial effort to replace existing project files with a better system
* sys: Added back marking provider as dirty
* sys: Remove git commit information from project files
* sys: Format data processor save file nicely
* fix: Automatic pattern loading not working correctly
* ui: Added warning popup when closing a provider with modifications
Closes#604
* sys: Fixed build issues
* tests: Removed useless debug logs
* patterns: Updated pattern language
* sys: Added log message when crashing with a signal
* sys: Make sure abnormal termination handlers are being called more reliably
* cmake: use GNUInstallDirs to find install dirs on Linux
* install plugins to lib/imhex/plugins
* fix included files in imhex.spec
* fix the release CI + do not upload x86_64 folder for Fedora
* change rpm names
* added IMHEX_STRIP_RELEASE option to optionally strip releases files (was done all the time before)
* Customize our imhex.spec file (use online building for our Fedora package)
* added IMHEX_PLUGINS_IN_SHARE option for AppImage
* test
* feat: Added LEB128 in data inspector
* feat: Added support for editing LEB128 values
* Moved LEB functions from utils.cpp to crypto.cpp
* Added placeholders for translations
* Made DataInspector::impl::Entry.maxSize mandatory
* Fixed undefined leftshifting behaviour
fix not saving to "XDG_DATA_HOME", when "XDG_DATA_DIRS" is available.
fix "Content Store" persist in flatpak.
XDG specification specifies how to find config and data directories on
linux systems. Specifically, it says this:
- Data should be written to $XDG_DATA_HOME
- Config should be written to $XDG_CONFIG_HOME
- Data should be read from $XDG_DATA_HOME:$XDG_DATA_DIRS
- Config should be read from $XDG_CONFIG_HOME:$XDG_CONFIG_DIRS
* build: Experimentally switch to gcc on macOS
* build: Corrected gcc paths
* build: Enable objective c support on macOS
* build: Enable ObjC and ObjC++ on macOS
* build: Add ObjC and ObjC++ flags
* build: Try compiling objc with clang
* build: Remove invalid flags again
* fix: Let's not include objc headers in C++ code
* sys: Move macos utils code to its own file
* fix: Missing unistd include on mac
* sys: Removed loader script stuff since it's currently unused and broken
* fix: Missing include
* fix: Another missing include
* fix: CFURLCreateWithBytes wants a pointer to mutable data
* fix: Try disabling name mangling of ObjC functions
* sys: Move macos utils declarations to its own header file
* fix: C Linkage
* fix: Move objc function prototypes to C++ headers
* fix: More missing includes
* fix: Warning error
* sys: Call ObjC with C ABI instead of trying to use C++
* build: Update libraries
* sys: Fixed build errors
* sys: No const correctness I guess
* sys: Fixed prototypes
* sys: This is C now
* sys: More nullptr -> NULL
* sys: Fix crash on exit
* sys: Try using proper std concepts instead of custom ones
* sys: Replaced another hex::is_signed
* build: Upgrade to gcc 12 and MacOS Monterey
* build: Fixed MacOS runner name
* build: Cache correct ccache folder on macOS
* ui/ux: Initial recreation of the hex editor view
* ui/ux: Added back support for editing cells
* ux: Make scrolling and selecting bytes feel nice again
* ui/ux: Improved byte selecting, added footer
* sys: Make math evaluator more generic to support integer only calculations
* patterns: Moved value formatting into pattern language
* ui/ux: Added Goto and Search popups, improved selection
* ui: Added better tooltips for bookmarks and patterns
* sys: Use worse hex search algorithm on macOS
Sadly it still doesn't support `std::boyer_moore_horsepool_searcher`
* ui: Added back missing events, menu items and shortcuts
* fix: Bookmark highlighting being rendered off by one
* fix: Various macOS build errors
* fix: size_t is not u64 on macos
* fix: std::fmod and std::pow not working with integer types on macos
* fix: Missing semicolons
* sys: Added proper integer pow function
* ui: Added back support for custom encodings
* fix: Editor not jumping to selection when selection gets changed
* ui: Turn Hexii setting into a data visualizer
* sys: Added back remaining shortcuts
* sys: Remove old hex editor files
* sys: Moved more legacy things away from the hex editor view, updated localization
* fix: Hex editor scrolling behaving weirdly and inconsistently
* sys: Cleaned up Hex editor code
* sys: Added selection color setting, localized all new settings
* fix: Search feature not working correctly
* ui: Replace custom ImGui::Disabled function with native ImGui ones
* ui: Fix bookmark tooltip rendering issues
* fix: Another size_t not being 64 bit issue on MacOS
* sys: Make ImHex compile with -Wall -Wextra -Werror
* sys: Fixed various build errors on Linux
* sys: Explicitly ignore return value of `system` function
* sys: More fixes for the warnings GitHub Actions enables somehow
* sys: More fixes
* sys: Remove -Werror again to see all GitHub Actions warnings
* sys: Hopefully fixed all remaining warnings
* sys: Added back -Werror
* git: Change windows icon in GitHub Actions
* refactor(patterns): add visitor interface
* refactor(patterns): add public accessors
* refactor(patterns): add method to get pattern value
* refactor(pattern): make some methods public
* refactor(pattern): extract code to draw GUI
* refactor(patterns): remove GUI related code from patterns
* refactor: move common GUI function from pattern to pattern_drawer
* refactor(pattern_drawer): extract common code into methods
* refactor: rename ImGuiDrawer -> PatternDrawer
* refactor(patternr): move displayEnd into PatternDrawer
* refactor: use ArrayPattern concept to restrict argument type
Co-authored-by: Dmitry Polshakov <dmitry.polshakov@dsr-corporation.com>
* fix(eval): restore data offset for local variables
* test(pattern_lang): add tests for arrays, nested structs and functions
Co-authored-by: Dmitry Polshakov <dmitry.polshakov@dsr-corporation.com>