A tool for use with clang to analyze #includes in C and C++ source files

Overview

Include What You Use

Build Status

For more in-depth documentation, see docs.

Instructions for Users

"Include what you use" means this: for every symbol (type, function, variable, or macro) that you use in foo.cc (or foo.cpp), either foo.cc or foo.h should include a .h file that exports the declaration of that symbol. (Similarly, for foo_test.cc, either foo_test.cc or foo.h should do the including.) Obviously symbols defined in foo.cc itself are excluded from this requirement.

This puts us in a state where every file includes the headers it needs to declare the symbols that it uses. When every file includes what it uses, then it is possible to edit any file and remove unused headers, without fear of accidentally breaking the upwards dependencies of that file. It also becomes easy to automatically track and update dependencies in the source code.

CAVEAT

This is alpha quality software -- at best (as of July 2018). It was originally written to work specifically in the Google source tree, and may make assumptions, or have gaps, that are immediately and embarrassingly evident in other types of code.

While we work to get IWYU quality up, we will be stinting new features, and will prioritize reported bugs along with the many existing, known bugs. The best chance of getting a problem fixed is to submit a patch that fixes it (along with a test case that verifies the fix)!

How to Build

Include-what-you-use makes heavy use of Clang internals, and will occasionally break when Clang is updated. Usually such discrepancies are detected by build bot and fixed promptly.

The IWYU master branch follows Clang main branch.

We also have convenience tags and branches for released versions of Clang (called clang_<version>, e.g. clang_5.0). To build against a Clang release, check out the corresponding branch in IWYU before configuring the build. More details in the instructions below.

We assume you already have compiled LLVM and Clang libraries on your system, either via packages for your platform or built from source. You can use this mapping table to combine Clang and IWYU versions correctly:

Clang IWYU version IWYU branch
3.6 0.4 clang_3.6
3.7 0.5 clang_3.7
3.8 0.6 clang_3.8
3.9 0.7 clang_3.9
4.0 0.8 clang_4.0-r2
5.0 0.9 clang_5.0
6 0.10 clang_6.0
7 0.11 clang_7.0
8 0.12 clang_8.0
9 0.13 clang_9.0
10 0.14 clang_10
11 0.15 clang_11
... ... ...
main master

NOTE: If you use the Debian/Ubuntu packaging available from https://apt.llvm.org, you'll need the following packages installed:

  • llvm-<version>-dev
  • libclang-<version>-dev
  • clang-<version>

Packaging for other platforms will likely be subtly different.

To set up an environment for building:

  • Create a directory for IWYU development, e.g. iwyu

  • Clone the IWYU Git repo:

    iwyu$ git clone https://github.com/include-what-you-use/include-what-you-use.git
    
  • Presumably, you'll be building IWYU with a released version of LLVM and Clang, so check out the corresponding branch. For example, if you have Clang 6.0 installed, use the clang_6.0 branch. IWYU master tracks LLVM & Clang main:

    iwyu$ cd include-what-you-use
    iwyu/include-what-you-use$ git checkout clang_6.0
    
  • Create a build root and use CMake to generate a build system linked with LLVM/Clang prebuilts:

    # This example uses the Makefile generator, but anything should work.
    iwyu/include-what-you-use$ cd ..
    iwyu$ mkdir build && cd build
    
    # For IWYU 0.10/Clang 6 and earlier
    iwyu/build$ cmake -G "Unix Makefiles" -DIWYU_LLVM_ROOT_PATH=/usr/lib/llvm-6.0 ../include-what-you-use
    
    # For IWYU 0.11/Clang 7 and later
    iwyu/build$ cmake -G "Unix Makefiles" -DCMAKE_PREFIX_PATH=/usr/lib/llvm-7 ../include-what-you-use
    

    (substitute the llvm-6.0 or llvm-7 suffixes with the actual version compatible with your IWYU branch)

    or, if you have a local LLVM and Clang build tree, you can specify that as CMAKE_PREFIX_PATH for IWYU 0.11 and later:

    iwyu/build$ cmake -G "Unix Makefiles" -DCMAKE_PREFIX_PATH=~/llvm-project/build ../include-what-you-use
    
  • Once CMake has generated a build system, you can invoke it directly from build, e.g.

    iwyu/build$ make
    

Instructions for building Clang are available at https://clang.llvm.org/get_started.html.

How to Install

If you're building IWYU out-of-tree or installing pre-built binaries, you need to make sure it can find Clang built-in headers (stdarg.h and friends.)

Clang's default policy is to look in path/to/clang-executable/../lib/clang/<clang ver>/include. So if Clang 3.5.0 is installed in /usr/bin, it will search for built-ins in /usr/lib/clang/3.5.0/include.

Clang tools have the same policy by default, so in order for IWYU to analyze any non-trivial code, it needs to find Clang's built-ins in path/to/iwyu/../lib/clang/3.5.0/include where 3.5.0 is a stand-in for the version of Clang your IWYU was built against.

Note that some distributions/packages may have different defaults, you can use clang -print-resource-dir to find the base path of the built-in headers on your system.

So for IWYU to function correctly, you need to copy the Clang include directory to the expected location before running (similarly, use include-what-you-use -print-resource-dir to learn exactly where IWYU wants the headers).

This weirdness is tracked in issue 100, hopefully we can make this more transparent over time.

How to Run

The original design was built for Make, but a number of alternative run modes have come up over the years.

Plugging into Make

The easiest way to run IWYU over your codebase is to run

  make -k CXX=/path/to/llvm/Debug+Asserts/bin/include-what-you-use

or

  make -k CXX=/path/to/llvm/Release/bin/include-what-you-use

(include-what-you-use always exits with an error code, so the build system knows it didn't build a .o file. Hence the need for -k.)

Include-what-you-use only analyzes .cc (or .cpp) files built by make, along with their corresponding .h files. If your project has a .h file with no corresponding .cc file, IWYU will ignore it unless you use the --check_also switch to add it for analysis together with a .cc file.

Using with CMake

CMake has grown native support for IWYU as of version 3.3. See their documentation for CMake-side details.

The CMAKE_CXX_INCLUDE_WHAT_YOU_USE option enables a mode where CMake first compiles a source file, and then runs IWYU on it.

Use it like this:

  mkdir build && cd build
  CC="clang" CXX="clang++" cmake -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="path/to/iwyu;-Xiwyu;any;-Xiwyu;iwyu;-Xiwyu;args" ...

or, on Windows systems:

  mkdir build && cd build
  cmake -DCMAKE_CXX_COMPILER="%VCINSTALLDIR%/bin/cl.exe" -DCMAKE_CXX_INCLUDE_WHAT_YOU_USE="path/to/iwyu;-Xiwyu;any;-Xiwyu;iwyu;-Xiwyu;args" -G Ninja ...

The option appears to be separately supported for both C and C++, so use CMAKE_C_INCLUDE_WHAT_YOU_USE for C code.

Note that with Microsoft's Visual C++ compiler, IWYU needs the --driver-mode=cl argument to understand the MSVC options from CMake.

Using with a compilation database

The iwyu_tool.py script predates the native CMake support, and works off the compilation database format. For example, CMake generates such a database named compile_commands.json with the CMAKE_EXPORT_COMPILE_COMMANDS option enabled.

The script's command-line syntax is designed to mimic Clang's LibTooling, but they are otherwise unrelated. It can be used like this:

  mkdir build && cd build
  CC="clang" CXX="clang++" cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ...
  iwyu_tool.py -p .

or, on Windows systems:

  mkdir build && cd build
  cmake -DCMAKE_CXX_COMPILER="%VCINSTALLDIR%/bin/cl.exe" -DCMAKE_C_COMPILER="%VCINSTALLDIR%/VC/bin/cl.exe" -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja ...
  python iwyu_tool.py -p .

Unless a source filename is provided, all files in the project will be analyzed.

See iwyu_tool.py --help for more options.

Applying fixes

We also include a tool that automatically fixes up your source files based on the IWYU recommendations. This is also alpha-quality software! Here's how to use it (requires python):

  make -k CXX=/path/to/llvm/Debug+Asserts/bin/include-what-you-use 2> /tmp/iwyu.out
  python fix_includes.py < /tmp/iwyu.out

If you don't like the way fix_includes.py munges your #include lines, you can control its behavior via flags. fix_includes.py --help will give a full list, but these are some common ones:

  • -b: Put blank lines between system and Google includes
  • --nocomments: Don't add the 'why' comments next to includes

How to Correct IWYU Mistakes

  • If fix_includes.py has removed an #include you actually need, add it back in with the comment '// IWYU pragma: keep' at the end of the #include line. Note that the comment is case-sensitive.
  • If fix_includes.py has added an #include you don't need, just take it out. We hope to come up with a more permanent way of fixing later.
  • If fix_includes.py has wrongly added or removed a forward-declare, just fix it up manually.
  • If fix_includes.py has suggested a private header file (such as <bits/stl_vector.h>) instead of the proper public header file (<vector>), you can fix this by inserting a specially crafted comment near top of the private file (assuming you can write to it): '// IWYU pragma: private, include "the/public/file.h"'.

Current IWYU pragmas are described in IWYUPragmas.

Issues
  • Precompiled-headers support with --prefix_header_includes?

    Precompiled-headers support with --prefix_header_includes?

    Originally reported on Google Code with ID 126

    
    I am trying to figure out if there is any support for precompiled headers with iwyu.
    The only thing I found is to provide the precompiled header to clang with -include
    and --prefix_header_includes with to iwyu. However the results are not what I expected.
    
    For the test I am attaching, the command line reads like this:
    
    F:\tests\build\bin\Release\include-what-you-use.exe F:\tests\iwyutest\iwyutest\iwyutest.cpp
    -w -MD -I"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include" -IF:\tests\iwyutest
    -IF:\tests\iwyutest\iwyutest -DWIN32 -DNDEBUG -D_CONSOLE -D_UNICODE -include F:\tests\iwyutest\iwyutest\stdafx.h
    -Xiwyu --prefix_header_includes=remove
    
    And the result is this:
    
    F:/tests/iwyutest/iwyutest/iwyutest.cpp should add these lines:
    #include "tchar.h"                      // for _TCHAR, _tmain
    
    F:/tests/iwyutest/iwyutest/iwyutest.cpp should remove these lines:
    - #include "stdafx.h"  // lines 4-4
    
    The full include-list for F:/tests/iwyutest/iwyutest/iwyutest.cpp:
    #include "tchar.h"                      // for _TCHAR, _tmain
    
    Both suggestions seem incorrect right?
    
    1) #include "tchar.h" should not be necessary because it's already included in stdafx.h
    2) stdafx.h is needed because this is a precompiled header (although I can understand
    that if there is no real support for this it can complain about it)
    
    Am I doing something wrong here?
    
    

    Reported by dpunset on 2014-04-10 14:58:55


    - _Attachment: [iwyutest.rar](https://storage.googleapis.com/google-code-attachments/include-what-you-use/issue-126/comment-0/iwyutest.rar)_ Type-Defect Priority-Medium 
    opened by vsapsai 58
  • Assertion failed: class_decl &&

    Assertion failed: class_decl && "TemplateSpecializationType is not a TplSpecDecl?"

    Originally reported on Google Code with ID 150

    I'm trying to use iwyu with http://github.com/mapbox/mapbox-gl-native on OS X 10.9.
    I compiled iwyu against a clang 3.4.2 final stable.
    
    I'm running this command:
    
    CXX="include-what-you-use -Xiwyu --verbose=3 -isystem\"`xcode-select -p`/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1\""
    make linux
    
    and the first command gyp generates is
    
      include-what-you-use -Xiwyu --verbose=3 -isystem"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/c++/v1"
    '-DNDEBUG' -I../../include -I../Release/obj/gen/include  -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk
    -fasm-blocks -mpascal-strings -O3 -mmacosx-version-min=10.9 -arch x86_64 -std=c++11
    -stdlib=libc++ -fvisibility-inlines-hidden -Wall -Wextra -I/usr/local/Cellar/libpng/1.6.10/include/libpng16
    -I/usr/local/include -I/Users/kkaefer/Code/gl/native/mapnik-packaging/osx/out/build-cpp11-libcpp-universal/include
    -MMD -MF ../Release/.deps/../Release/obj.target/llmr-x86/src/clipper/clipper.o.d.raw
     -c -o ../Release/obj.target/llmr-x86/src/clipper/clipper.o ../../src/clipper/clipper.cpp
    
    which fails with
    
    /Users/kkaefer/Code/include-what-you-use/iwyu.cc:3081: Assertion failed: class_decl
    && "TemplateSpecializationType is not a TplSpecDecl?"
    make[1]: *** [../Release/obj.target/llmr-x86/src/clipper/clipper.o] Abort trap: 6
    
    

    Reported by [email protected] on 2014-06-17 14:38:03

    Type-Defect Priority-Medium Cxx11 
    opened by vsapsai 43
  • Absolute for relative path replacement

    Absolute for relative path replacement

    Originally reported on Google Code with ID 5

    When the compile line refers to a source file by its absolute name iwyu suggests that
    the includes be changed to absolute:
    
    jason$ cat Foo.h
    #ifndef _FOO_H_
    #define _FOO_H_
    
    class Foo {
      Foo();
    };
    
    #endif
    
    jason$ cat Foo.cpp
    #include "Foo.h"
    
    Foo::Foo() {}
    
    jason$ include-what-you-use /Users/jason/Desktop/iwyu/Foo.cpp
    
    /Users/jason/Desktop/iwyu/Foo.cpp should add these lines:
    #include </Users/jason/Desktop/iwyu/Foo.h>  // for Foo
    
    /Users/jason/Desktop/iwyu/Foo.cpp should remove these lines:
    - #include "Foo.h"  // lines 1-1
    
    The full include-list for /Users/jason/Desktop/iwyu/Foo.cpp:
    #include </Users/jason/Desktop/iwyu/Foo.h>  // for Foo
    
    ---
    
    
    However when referring to the source file by relative name the output is as expected:
    
    
    jason$ ~/Sources/llvm/build/bin/include-what-you-use Foo.cpp
    (Foo.cpp has correct #includes/fwd-decls)
    
    

    Reported by jason.haslam on 2011-02-07 07:24:43

    Type-Defect Priority-Medium 
    opened by vsapsai 42
  • In-tree build is not working (inconsistency in registered CommandLine or core dumped)

    In-tree build is not working (inconsistency in registered CommandLine or core dumped)

    When building IWYU in tree with either clang 4.0.1 or clang 5.0, the compilation succeed but I do end up with an unusable executable:

    $ include-what-you-use
    : CommandLine Error: Option 'asan-instrument-assembly' registered more than once!
    LLVM ERROR: inconsistency in registered CommandLine options
    

    I seek the issue a little bit and found some LLVM bug reference (https://reviews.llvm.org/rL240104) speaking of double link to some LLVM static lib. I did examine the link line for IWYU and discover a lot of duplicates. In fact all LLVM libs where duplicated on the command line.

    I commented out the

     target_link_libraries(include-what-you-use
        LLVMX86AsmParser # MC, MCParser, Support, X86CodeGen, X86Desc, X86Info
    ...
        LLVMDemangle
        )
    

    in IWYU CMakeLists.txt and I end up with an apparently working iwyu:

    $ include-what-you-use
    error: no input files
    error: unable to handle compilation, expected exactly one compiler job in ''
    $ include-what-you-use --version
    include-what-you-use 0.9 (git:576e80f) based on clang version 5.0.0 (tags/RELEASE_500/final)
    
    

    However on a "real" call using compilation database generated by CMake on my project (which correctly builds with either clang 4.0.1 or clang 5.0.0) I get core dumped.

    My LLVM+Clang+IWYU build uses CMake + Ninja with the following parameters:

    MY_LIBS=clang MY_VERSION=5.0 INSTALL_DIR=/local/clang cmake .. -G Ninja
    -DCLANG_ENABLE_BOOTSTRAP=On
    -DCMAKE_BUILD_TYPE=MinSizeRel
    -DCMAKE_CXX_FLAGS="-Wl,-rpath=${INSTALL_DIR}/lib/"
    -DLLVM_TARGETS_TO_BUILD="X86"
    -DLLVM_ENABLE_CXX1Y=On
    -DLLVM_LINK_LLVM_DYLIB=On
    -DLIBOMP_TSAN_SUPPORT=On
    -DCMAKE_INSTALL_PREFIX:PATH=${INSTALL_DIR}/${MY_LIBS}/${MY_VERSION}/

    What should I do to get a working IWYU in-tree build?

    opened by TheErk 41
  • Also add include in same directory

    Also add include in same directory

    This fixes a bug where absolute paths are unnecessarily used for a header resulting even in inclusion of unwanted headers as described in #272

    The problem arises, as the directory of the file, which is implicitely added to the search path, is not honored. See #271 for this.

    This supersedes the patch(es) in #5 and should also close those issues. This solution is better, than adding the main-files directory to the search path, as this does not add it globally which can cause problems if headers are checked, which might not be in the same directory as the main-file.

    • [x] All tests run successfully
    • [x] Fix verified by testing the test-case from #271 manually
    • [x] Remove IndirectSubfolderClass from direct_subfolder.h
    • [x] Rebase and remove DEVTOOLS_MAINTENANCE_ from tests
    opened by Flamefire 39
  • Allow build outside of clang source tree

    Allow build outside of clang source tree

    Originally reported on Google Code with ID 64

    Hi
    
    I would like to package your work into Debian. However, the fact that include-what-you-use
    needs the clang source tree greatly complexifies the build process.
    It would be nice if you could update your work to build against clang headers and libs.
    Here is a list of headers provided by the libclang-dev package in Debian and Ubuntu:
    http://packages.debian.org/sid/amd64/libclang-dev/filelist
    

    Reported by sylvestre.ledru on 2011-12-11 16:50:44

    Priority-Medium Type-Enhancement 
    opened by vsapsai 37
  • Unused templates are ignored on Windows

    Unused templates are ignored on Windows

    Originally reported on Google Code with ID 129

    Steps to reproduce:
    1. Run IWYU on Windows on a file
    
        #include "tests/cxx/direct.h"
        template <typename T> void foo() {
          IndirectClass ic;
        }
    
    Actual result:
    IWYU recommends to remove #include "tests/cxx/direct.h".
    
    Expected result:
    IWYU should recommend to remove #include "tests/cxx/direct.h" and to add #include "tests/cxx/indirect.h".
    

    Reported by vsapsai on 2014-04-24 16:03:06

    Type-Defect Priority-Medium 
    opened by vsapsai 36
  • Treat explicit instantiations as full uses

    Treat explicit instantiations as full uses

    Modify IsFowardDecl() to check that the decl is not an explicit template instantiation (declaration or definition) This check is also in its own function, IsExplicitInstantiation(), for convenience.

    opened by jru 31
  • Install clang resources

    Install clang resources

    This is a potential fix for the years-old #100.

    The key problem in that issue is that iwyu needs to know at runtime where the clang resource headers are. If it is built in tree or installed into the same tree as llvm, that just works, but for out-of-tree use cases fail. I'm adding two solutions to this:

    1. ask the out-of-tree clang at build-time where it's resource headers are, remember and use that location at runtime.
    2. add an override to this default. This is mainly relevant when installing iwyu on a system or when you're shipping your own headers for some reason. On top of this, headers can optionally be bundled with the installation to make this work without clang present.
    opened by pfaffe 30
  • Plain cmake

    Plain cmake

    It looks like Debian packaging for Clang is fixed now, so simplify CMakeLists.txt and documentation.

    This PR is mostly to see if Travis picks up the change and builds correctly.

    opened by kimgr 30
  • pragma keep doesn't prevent removal of dublicates

    pragma keep doesn't prevent removal of dublicates

    Originally reported on Google Code with ID 140

    Given
    ==> double.c <==
    int main()
    {
        int a;
    #include "double.h" // IWYU pragma: keep
    #include "double.h" // IWYU pragma: keep
    }
    ==> double.h <==
    a+=1;
    
    IWYU suggests double.h to be removed. The pragma should prevent also duplicates from
    being removed.
    

    Reported by [email protected] on 2014-05-30 20:07:37

    Type-Defect Priority-Medium 
    opened by vsapsai 29
  • IWYU seems to treat headers included in quotes and in brackets differently

    IWYU seems to treat headers included in quotes and in brackets differently

    How to Reproduce:

    Here is my file_size.cc adapted from https://www.boost.org/doc/libs/1_78_0/libs/filesystem/example/tut1.cpp .

    #include <iostream>
    
    #include "boost/filesystem.hpp"
    
    using boost::filesystem::file_size;
    
    int main(int argc, char* argv[]) {
      if (argc < 2) {
    
        std::cout << "Usage: tut1 path\n";
        return 1;
      }
      std::cout << argv[1] << " " << file_size(argv[1]) << '\n';
      return 0;
    }
    

    On a Ubuntu 18.04 system with libboost-all-dev installed, running include-what-you-use with -Xiwyu --mapping_file=boost-all.imp gives the following output:

    experimental/story/toolchain/file_size.cc should add these lines:
    #include <boost/filesystem.hpp>  // for file_size
    
    experimental/storypku/toolchain/file_size.cc should remove these lines:
    - #include "boost/filesystem.hpp"  // lines 3-3
    
    The full include-list for experimental/storypku/toolchain/file_size.cc:
    #include <boost/filesystem.hpp>  // for file_size
    #include <iostream>              // for operator<<, basic_ostream, cout, ostream, basic_ostream<>::__ostream_type, char_traits
    ---
    

    I know that I cound workaround this issue by using bracket includes. However, on the IWYU side, can something be done to loosen this restriction ?

    opened by storypku 1
  • iwyu(1) should look at things inside #if NOT_TRUE

    iwyu(1) should look at things inside #if NOT_TRUE

    Let's consider the following code:

    # if LINUX_HEADER_EXISTS
        # include <linux_header.h>
    # endif
    # if FREEBSD_HEADER_EXISTS
        # include <freebsd_header.h>
    # endif
    
    # if LINUX
        linux_function();
    # elif FREEBSD
        fbsd_function();
    # endif
    

    Currently, iwyu(1) suggests to remove the FreeBSD include in Linux. It shouldn't. I don't know if we should add a complete list of symbols defined by systems to fix this...

    opened by alejandro-colomar 0
  • --keep is being ignored

    --keep is being ignored

    Hi,

    iwyu(1) seems to be ignoring -Xiwyu --keep=nxt_ftm.h:

    $ make CC=iwyu
    iwyu -c -pipe -fPIC -fvisibility=hidden -O \
            -W -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wmissing-prototypes -Werror -g \
            -Xiwyu --no_fwd_decls -Xiwyu --error -Xiwyu --keep=nxt_ftm.h \
            -I src -I build   \
            -o build/src/nxt_lib.o \
            -MMD -MF build/src/nxt_lib.dep -MT build/src/nxt_lib.o \
            src/nxt_lib.c
    
    src/nxt_lib.c should add these lines:
    
    src/nxt_lib.c should remove these lines:
    - #include <nxt_ftm.h>  // lines 10-10
    
    The full include-list for src/nxt_lib.c:
    #include <malloc.h>           // for mallopt, M_PERTURB
    #include <nxt_atomic.h>       // for nxt_atomic_t
    #include <nxt_auto_config.h>  // for NXT_DEBUG, NXT_HAVE_MALLOPT, NXT_LINUX
    #include <nxt_clang.h>        // for nxt_unreachable
    #include <nxt_errno.h>        // for nxt_strerror_start, NXT_OK, NXT_ERROR
    #include <nxt_file.h>         // for nxt_stderr_start
    #include <nxt_log.h>          // for nxt_log_start, nxt_debug, nxt_main_log
    #include <nxt_main.h>         // for nxt_thread_t, nxt_task_t, nxt_lib_start
    #include <nxt_process.h>      // for nxt_process_arguments, nxt_egid, nxt_euid
    #include <nxt_random.h>       // for nxt_random_init
    #include <nxt_spinlock.h>     // for nxt_thread_spin_init
    #include <nxt_thread.h>       // for nxt_thread_declare_data, nxt_thread_handle
    #include <nxt_thread_time.h>  // for nxt_thread_time_update, nxt_thread_time_t
    #include <nxt_types.h>        // for nxt_int_t, nxt_uint_t, nxt_bool_t
    #include <nxt_work_queue.h>   // for nxt_task_next_ident
    #include <stdlib.h>           // for exit, NULL
    #include <unistd.h>           // for getegid, geteuid, getpagesize, getpid
    ---
    make: *** [build/Makefile:161: build/src/nxt_lib.o] Error 1
    

    It still fails if I change <> to "".

    opened by alejandro-colomar 0
  • <cstdio> recommended in C

    recommended in C

    See the following bogus iwyu(1) report. It's weird, because __cplusplus is not defined, and if I try to include <cstdio>, of course it errors.

    Cheers,

    Alex


    iwyu -c -pipe -fPIC -fvisibility=hidden -O -W -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wmissing-prototypes -Werror -g -Xiwyu --no_fwd_decls -Xiwyu --error -I src -I build   \
                          \
                         \
    -o build/src/nxt_process_title.o \
    -MMD -MF build/src/nxt_process_title.dep -MT build/src/nxt_process_title.o \
    src/nxt_process_title.c
    
    src/nxt_process_title.c should add these lines:
    #include <stdarg.h>       // for va_end, va_start
    #include <sys/types.h>    // for u_char, size_t
    #include <cstdio>         // for NULL, va_list
    #include "nxt_log.h"      // for nxt_debug
    #include "nxt_malloc.h"   // for nxt_malloc
    #include "nxt_process.h"  // for NXT_SETPROCTITLE_ARGV, nxt_process_arguments
    #include "nxt_sprintf.h"  // for nxt_vsprintf
    #include "nxt_string.h"   // for nxt_strlen, nxt_memcpy, nxt_memset
    #include "nxt_types.h"    // for nxt_uint_t
    

    See with more verbosity, if it helps (I can't understand it). If you want me to run some specific flags for you, or send you complete log files, please tell me.

    $ make CC=iwyu 2>&1 | grep -e NULL -e cstdio
    [ Use macro   ] src/nxt_lib.c:132:17: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_lib.c:132:17
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stdlib.h> for NULL (#include already present)
    Ignoring full use of NULL (src/nxt_lib.c:132:17): #including dfn from <stdlib.h>
    [ Use macro   ] src/nxt_malloc.c:37:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:37:16
    [ Use macro   ] src/nxt_malloc.c:37:36: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:37:36
    [ Use macro   ] src/nxt_malloc.c:52:28: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:52:28
    [ Use macro   ] src/nxt_malloc.c:71:28: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:71:28
    [ Use macro   ] src/nxt_malloc.c:93:28: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:93:28
    [ Use macro   ] src/nxt_malloc.c:160:12: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_malloc.c:160:12
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (in associated header)
    Ignoring full use of NULL (src/nxt_malloc.c:37:16): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_malloc.c:37:36): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_malloc.c:52:28): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_malloc.c:71:28): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_malloc.c:93:28): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_malloc.c:160:12): #including dfn from <stddef.h>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    [ Use macro   ] src/nxt_credential.c:44:30: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_credential.c:44:30
    [ Use macro   ] src/nxt_credential.c:59:18: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_credential.c:59:18
    [ Use macro   ] src/nxt_credential.c:64:34: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_credential.c:64:34
    [ Use macro   ] src/nxt_credential.c:140:39: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_credential.c:140:39
    [ Use macro   ] src/nxt_credential.c:159:35: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_credential.c:159:35
    | | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Ignoring full use of NULL (src/nxt_credential.c:44:30): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_credential.c:59:18): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_credential.c:64:34): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_credential.c:140:39): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_credential.c:159:35): #including dfn from <stddef.h>
    [ Use macro   ] src/nxt_isolation.c:105:32: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:105:32
    [ Use macro   ] src/nxt_isolation.c:149:38: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:149:38
    [ Use macro   ] src/nxt_isolation.c:239:58: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:239:58
    [ Use macro   ] src/nxt_isolation.c:240:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:240:16
    [ Use macro   ] src/nxt_isolation.c:268:61: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:268:61
    [ Use macro   ] src/nxt_isolation.c:269:18: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:269:18
    [ Use macro   ] src/nxt_isolation.c:278:61: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:278:61
    [ Use macro   ] src/nxt_isolation.c:279:18: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:279:18
    [ Use macro   ] src/nxt_isolation.c:327:35: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:327:35
    [ Use macro   ] src/nxt_isolation.c:406:22: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:406:22
    [ Use macro   ] src/nxt_isolation.c:475:63: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:475:63
    [ Use macro   ] src/nxt_isolation.c:476:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:476:16
    [ Use macro   ] src/nxt_isolation.c:493:56: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:493:56
    [ Use macro   ] src/nxt_isolation.c:524:67: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:524:67
    [ Use macro   ] src/nxt_isolation.c:525:17: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:525:17
    [ Use macro   ] src/nxt_isolation.c:526:66: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:526:66
    [ Use macro   ] src/nxt_isolation.c:527:22: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:527:22
    [ Use macro   ] src/nxt_isolation.c:531:61: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:531:61
    [ Use macro   ] src/nxt_isolation.c:532:22: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:532:22
    [ Use macro   ] src/nxt_isolation.c:536:62: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:536:62
    [ Use macro   ] src/nxt_isolation.c:537:22: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:537:22
    [ Use macro   ] src/nxt_isolation.c:558:24: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:558:24
    [ Use macro   ] src/nxt_isolation.c:596:33: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:596:33
    [ Use macro   ] src/nxt_isolation.c:597:19: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:597:19
    [ Use macro   ] src/nxt_isolation.c:612:41: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:612:41
    [ Use macro   ] src/nxt_isolation.c:623:34: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:623:34
    [ Use macro   ] src/nxt_isolation.c:638:39: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:638:39
    [ Use macro   ] src/nxt_isolation.c:649:34: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:649:34
    [ Use macro   ] src/nxt_isolation.c:657:39: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:657:39
    [ Use macro   ] src/nxt_isolation.c:855:61: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:855:61
    [ Use macro   ] src/nxt_isolation.c:883:11: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:883:11
    [ Use macro   ] src/nxt_isolation.c:884:14: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:884:14
    [ Use macro   ] src/nxt_isolation.c:885:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:885:16
    [ Use macro   ] src/nxt_isolation.c:886:18: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:886:18
    [ Use macro   ] src/nxt_isolation.c:891:33: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:891:33
    [ Use macro   ] src/nxt_isolation.c:896:33: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:896:33
    [ Use macro   ] src/nxt_isolation.c:901:35: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:901:35
    [ Use macro   ] src/nxt_isolation.c:913:20: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:913:20
    [ Use macro   ] src/nxt_isolation.c:919:53: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:919:53
    [ Use macro   ] src/nxt_isolation.c:922:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:922:16
    [ Use macro   ] src/nxt_isolation.c:927:37: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:927:37
    [ Use macro   ] src/nxt_isolation.c:932:37: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:932:37
    [ Use macro   ] src/nxt_isolation.c:946:23: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:946:23
    [ Use macro   ] src/nxt_isolation.c:950:27: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:950:27
    [ Use macro   ] src/nxt_isolation.c:1007:21: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:1007:21
    [ Use macro   ] src/nxt_isolation.c:1011:19: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:1011:19
    [ Use macro   ] src/nxt_isolation.c:1019:19: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:1019:19
    [ Use macro   ] src/nxt_isolation.c:1023:23: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_isolation.c:1023:23
    | |-<<<NULL>>>
    |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    | |     | |   |     `-StringLiteral 0x55eb87ad8548 'const char[13]' lvalue "lang != NULL"
    `-StringLiteral 0x55eb87ad8548 'const char[13]' lvalue "lang != NULL"
    src/nxt_isolation.c:558:5 <Spelling=<scratch space>:237:1>: (13) [ StringLiteral ] 0x55eb87ad8548 StringLiteral 0x55eb87ad8548 'const char[13]' lvalue "lang != NULL"
    | |-<<<NULL>>>
    |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |   |-<<<NULL>>>
    |   |-<<<NULL>>>
    | |-<<<NULL>>>
    |     |-<<<NULL>>>
    |     |-<<<NULL>>>
    |     |-<<<NULL>>>
    |     |-<<<NULL>>>
    |       | |-<<<NULL>>>
    |   | |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
        |-<<<NULL>>>
        |-<<<NULL>>>
        |-<<<NULL>>>
        |-<<<NULL>>>
          | |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
      |-<<<NULL>>>
        | |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
      | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
      | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <stddef.h> for NULL (#include already present and needed)
    Ignoring full use of NULL (src/nxt_isolation.c:105:32): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:149:38): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:239:58): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:240:16): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:268:61): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:269:18): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:278:61): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:279:18): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:327:35): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:406:22): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:475:63): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:476:16): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:493:56): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:524:67): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:525:17): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:526:66): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:527:22): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:531:61): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:532:22): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:536:62): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:537:22): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:558:24): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:596:33): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:597:19): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:612:41): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:623:34): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:638:39): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:649:34): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:657:39): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:855:61): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:883:11): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:884:14): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:885:16): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:886:18): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:891:33): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:896:33): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:901:35): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:913:20): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:919:53): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:922:16): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:927:37): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:932:37): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:946:23): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:950:27): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:1007:21): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:1011:19): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:1019:19): #including dfn from <stddef.h>
    Ignoring full use of NULL (src/nxt_isolation.c:1023:23): #including dfn from <stddef.h>
    [ Use macro   ] src/nxt_process_title.c:55:22: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:55:22
    [ Use macro   ] src/nxt_process_title.c:71:28: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:71:28
    [ Use macro   ] src/nxt_process_title.c:83:17: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:83:17
    [ Use macro   ] src/nxt_process_title.c:100:20: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:100:20
    [ Use macro   ] src/nxt_process_title.c:108:27: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:108:27
    [ Use macro   ] src/nxt_process_title.c:120:14: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:120:14
    [ Use macro   ] src/nxt_process_title.c:135:28: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:135:28
    [ Use macro   ] src/nxt_process_title.c:151:16: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:151:16
    [ Use macro   ] src/nxt_process_title.c:165:27: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:165:27
    [ Use macro   ] src/nxt_process_title.c:197:18: NULL (from /usr/lib/clang/14.0.5/include/stddef.h:89:11)
    Marked full-info use of macro NULL (from /usr/lib/clang/14.0.5/include/stddef.h) at src/nxt_process_title.c:197:18
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    | |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    |-<<<NULL>>>
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/lib/clang/14.0.5/include/stddef.h to <cstdio> for NULL (set cover)
    Mapped /usr/include/stdio.h to <cstdio> for va_list (set cover)
    src/nxt_process_title.c:55:22: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:71:28: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:83:17: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:100:20: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:108:27: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:120:14: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:135:28: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:151:16: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:165:27: warning: NULL is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:193:5: warning: va_list is defined in <cstdio>, which isn't directly #included.
    src/nxt_process_title.c:197:18: warning: NULL is defined in <cstdio>, which isn't directly #included.
    #include <cstdio>         // for NULL, va_list
    #include <cstdio>         // for NULL, va_list 
    
    opened by alejandro-colomar 0
  • typedef before struct

    typedef before struct

    I got this bug from iwyu(1) while running it on some NGINX code. Okay, the code is not ideal, but it's correct. I simplified it to a minimial reproducer:

    $ cat typedef.c
    typedef struct foo_s foo_t;
    
    struct foo_s {
        int x;
    };
    
    $ iwyu -Xiwyu --no_fwd_decls typedef.c
    
    typedef.c should add these lines:
    struct foo_s;
    
    typedef.c should remove these lines:
    
    The full include-list for typedef.c:
    struct foo_s;
    ---
    

    I kind of get the reason iwyu(1) suggests the fwd decl even if I said I don't want them: if it suggested me to include the file that provides the declaration, it would be asking me to do a self-include, and of course it doesn't.

    In the real code, I found that there's a cyclic dep between typedefs, and that's why the typedef was before the struct definition. A struct declaration before the typedef seems to me useless, so iwyu(1) should avoid warning on this if possible.

    opened by alejandro-colomar 0
Releases(0.18)
  • 0.18(Mar 31, 2022)

    • [iwyu] Fix crash on C++20 consteval expressions
    • [iwyu] Use more conventional exit codes (breaking change!)
    • [iwyu_tool] Fix deprecation warning for python3
    • [iwyu] Fix crash on va_list on AArch64
    • [iwyu] Improved support for using declarations based on new Clang design

    Note the breaking change for exit codes; IWYU now always returns zero by default. See the README or help text for more information about compatibility overrides.

    Source code(tar.gz)
    Source code(zip)
  • 0.17(Dec 5, 2021)

    • [iwyu] Improve support for various C++ features (builtins, CTAD, specializations, type aliases)
    • [iwyu] Fix crash on invalid code
    • [iwyu] Remove hard dependency on x86 LLVM target
    • [mappings] Improve mappings for GNU libc
    • [iwyu_tool] More concise output for clang output format
    Source code(tar.gz)
    Source code(zip)
  • 0.16(May 25, 2021)

    • [iwyu_tool] Accept --load/-l argument for load limiting
    • [iwyu_tool] Signal success/failure with exit code
    • [mappings] Harmonize mapping generators
    • [mappings] Add mapping generator for CPython
    • [mappings] Improve mappings for libstdc++ and Boost
    • [cmake] Add explicit C++14 compiler flag
    • ... and many internal improvements
    Source code(tar.gz)
    Source code(zip)
  • 0.15(Nov 21, 2020)

    • [iwyu] Fix crash due to undefined behavior in AST traversal
    • [iwyu] Improve handling of operator new including C++17 features
    • [iwyu] Improve handling of templates
    • [iwyu_tool] Remove known compiler wrappers from the command list
    • [mappings] Improve Qt mapping generator
    • [mappings] Improve boost mappings
    • [mappings] Improve built-in mappings for <time.h>
    • [mappings] Add built-in mappings for max_align_t, ptrdiff_t, and wchar_t
    • [cmake] Support shared LLVM/Clang libraries and other improvements
    Source code(tar.gz)
    Source code(zip)
  • 0.14(May 17, 2020)

    • [iwyu] Report non-builtin enum base types
    • [iwyu] Disable forward-declares for decls in inline namespaces
    • [iwyu] Make C structs forward-declarable again
    • [iwyu] Always keep Qt .moc includes
    • [iwyu] Include binary type traits in analysis (e.g. __is_convertible_to)
    • [iwyu_tool] Fail fast if include-what-you-use is not found
    • [iwyu_tool] Print all diagnostic ouptut to stderr
    • [fix_includes] Improve file extension detection
    • Add man page for include-what-you-use
    Source code(tar.gz)
    Source code(zip)
  • 0.13(May 17, 2020)

    • [iwyu] Improved handling of relative includes in mappings and pragmas
    • [iwyu] Path normalization now collapses ..
    • [iwyu] Improve --no_fwd_decls not to remove required forward declarations
    • [iwyu] Improved handling of builtin templates
    • [iwyu] Don't mark forward declarations final
    • [iwyu] Tolerate using declarations in precompiled header
    • [mappings] Add script to generate Qt mappings, and new mappings for Qt 5.11
    • [iwyu_tool] Use directory from compilation database if available
    • Numerous documentation and build improvements
    Source code(tar.gz)
    Source code(zip)
  • clang_8.0(Apr 14, 2019)

    • [iwyu] New command-line option: --keep to mirror IWYU pragma: keep
    • [iwyu] New command-line option: --cxx17ns to suggest compact C++17 nested namespaces
    • [iwyu] Improve --no_fwd_decls to optimize for minimal number of redeclarations
    • [iwyu] Improved mappings for POSIX types and let mappings apply to builtins as well
    • [iwyu] More principled handling of explicit template instantiations
    • [iwyu_tool] Breaking change: extra args are no longer automatically prefixed with -Xiwyu (so you can use them for Clang args too)
    • [iwyu_tool] Better Windows support
    • [fix_includes] Better handling of template forward-decls
    Source code(tar.gz)
    Source code(zip)
  • 0.11(Dec 8, 2018)

    • [iwyu] Improved recognition of template and specialization uses
    • [iwyu] Improved CMake build system, see docs for build instructions
    • [mappings] Improved mappings for Boost, Intel intrinsics and libstdc++
    • [iwyu_tool] Several bug fixes and improvements
    • [iwyu_tool] Add --basedir argument to interpret IWYU output from another source tree
    • [fix_includes] Handle namespaces better
    • [fix_includes] Add --only_re switch to filter affected files
    • [fix_includes] Add --reorder/--noreorder switch to toggle reordering of includes
    Source code(tar.gz)
    Source code(zip)
  • clang_6.0(Apr 29, 2018)

  • clang_5.0(Feb 4, 2018)

Simple password/cookies/history/bookmarks stealer/dumper for chrome all version (includes 80+)

Simple password/cookies/history/bookmarks stealer/dumper for chrome all version (includes 80+), microsoft edge browser,includes all chromium based browsers, and all gecko based browser (firefox etc.).

null 52 Jun 14, 2022
RapidObj is an easy-to-use, single-header C++17 library that loads and parses Wavefront .obj files.

RapidObj About Integration Prerequisites Manual Integration CMake Integration API RapidObj Result Next Steps OS Support Third Party Tools and Resource

Slobodan Pavlic 66 Jun 20, 2022
A tool to edit Cyberpunk 2077 sav.dat files

This is a holidays project and will probably not reach the user-friendly GUI state that a save editor is expected to have.

null 259 Jun 9, 2022
A tool for Pikmin 1 model files

MODConv A Pikmin 1 model format converter Functionality NOTE: these are not command-line parameters, the program has a built-in input parser load (inp

null 4 Oct 20, 2021
A tool for generating build scripts for C++20 projects that use modules.

cpp_module_parser [cmop] A tool for generating build scripts for C++20 projects that use modules. The intent is to provide a backend for premake, for

Alexander Christensen 2 Nov 23, 2021
WinMerge is an Open Source differencing and merging tool for Windows.

WinMerge is an Open Source differencing and merging tool for Windows. WinMerge can compare both folders and files, presenting differences in a visual text format that is easy to understand and handle.

null 3k Jun 26, 2022
KeyScan is a C++ open source explanation tool targeting windows operating system.

KeyScan is a C++ open source explanation tool targeting windows operating system. it allows you to send keyboard events, mouse events and capture keystrokes (keylogger).!

null 9 Jun 12, 2022
A shebang-friendly script for "interpreting" single C99, C11, and C++ files, including rcfile support.

c99sh Basic Idea Control Files Shebang Tricks C++ C11 Credits Basic Idea A shebang-friendly script for "interpreting" single C99, C11, and C++ files,

Rhys Ulerich 100 Jun 9, 2022
ByteCopy , or BCP, intends to copy files accurately (down to the bytes) in a simple , safe and efficient manner.

ByteCopy v3.6 About ByteCopy , or BCP, intends to copy files accurately (down to the bytes) in a simple , safe and efficient manner. It's functionalit

A.P. Jo. 16 Jun 22, 2022
This is a collection of tools for creating and manipulating BitTorrent v2 torrent files

torrent tools This is a collection of tools for creating and manipulating BitTorrent v2 torrent files. torrent-new can create hybrid torrents, but the

Arvid Norberg 8 Jun 1, 2022
libnpy is a simple C++ library for reading and writing of numpy's .npy files.

C++ library for reading and writing of numpy's .npy files

Leon Merten Lohse 142 Jun 21, 2022
Libelf is a simple library to read ELF files

libelf Libelf is a simple library which provides functions to read ELF files. Headers #include <stdint.h> #include <elf.h> Structures typedef struct

David du Colombier 43 Jun 25, 2022
Cobalt Strike BOF Files with Nim!

BOF-Nim oh yeah baby I have an inkling it's possible, right now the problem seems to be getting the go function to be present in the Symbol table. No

byt3bl33d3r 59 Jun 22, 2022
Load Aseprite files for animated sprites in raylib.

raylib-aseprite Load Aseprite .aseprite files for animated sprites in raylib. Features Load Aseprite files directly for use in raylib Draw individual

Rob Loach 22 Jun 19, 2022
Disassembling .class files

jvmdisassembler Contribution You can contribute by creating an issue or pull request. Please keep the code clean and readable. All contributed code mu

Jonas 6 Jun 20, 2022
Atomically exchange two files in Linux

Atomically exchange two files in Linux.

David Pape 9 May 28, 2022
A combined suite of utilities for manipulating binary data files.

BinaryTools A combined suite of utilities for manipulating binary data files. It was developed for use on Windows but might compile on other systems.

David Walters 3 Sep 29, 2021
Authenticode Hash Calculator for PE32/PE32+ files

AuthHashCalc Authenticode Hash Calculator for PE32/PE32+ files System Requirements x86/x64 Windows 7/8/8.1/10/11 Administrative privilges are not requ

null 54 Jun 15, 2022
zsh module for automatically compiling sourced files

Zinit Module Motivation The module is a binary Zsh module (think about zmodload Zsh command, it's that topic) which transparently and automatically co

zdharma-continuum 9 Mar 26, 2022