Locate the current executable and the current module/library on the file system

Overview

Where Am I?

A drop-in two files library to locate the current executable and the current module on the file system.

Supported platforms:

  • Windows
  • Linux
  • Mac
  • iOS
  • Android
  • QNX Neutrino
  • FreeBSD
  • NetBSD
  • DragonFly BSD
  • SunOS

Just drop whereami.h and whereami.c into your build and get started. (see also customizing compilation)


Usage

  • wai_getExecutablePath() returns the path of the enclosing executable
  • wai_getModulePath() returns the path of the enclosing module

Example usage:

  • first call int length = wai_getExecutablePath(NULL, 0, NULL); to retrieve the length of the path
  • allocate the destination buffer with path = (char*)malloc(length + 1);
  • call wai_getExecutablePath(path, length, &dirname_length) again to retrieve the path
  • add a terminal NUL character with path[length] = '\0';

Here is the output of the example:

$ make -j -C _gnu-make
$ cp ./bin/mac-x86_64/library.dylib /tmp/
$ ./bin/mac-x86_64/executable --load-library=/tmp/library.dylib

executable path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable
  dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64
  basename: executable
module path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable
  dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64
  basename: executable

library loaded
executable path: /Users/gregory/Projects/whereami/bin/mac-x86_64/executable
  dirname: /Users/gregory/Projects/whereami/bin/mac-x86_64
  basename: executable
module path: /private/tmp/library.dylib
  dirname: /private/tmp
  basename: library.dylib
library unloaded

Customizing compilation

You can customize the library's behavior by defining the following macros:

  • WAI_FUNCSPEC
  • WAI_PREFIX
  • WAI_MALLOC
  • WAI_REALLOC
  • WAI_FREE

Compiling for Windows

There is a Visual Studio 2015 solution in the _win-vs14/ folder.

Compiling for Linux or Mac

There is a GNU Make 3.81 MakeFile in the _gnu-make/ folder:

$ make -j -C _gnu-make/

Compiling for Mac

See above if you want to compile from command line. Otherwise there is an Xcode project located in the _mac-xcode/ folder.

Compiling for iOS

There is an Xcode project located in the _ios-xcode/ folder.

If you prefer compiling from command line and deploying to a jailbroken device through SSH, use:

$ make -j -C _gnu-make/ binsubdir=ios CC="$(xcrun --sdk iphoneos --find clang) -isysroot $(xcrun --sdk iphoneos --show-sdk-path) -arch armv7 -arch armv7s -arch arm64" postbuild="codesign -s 'iPhone Developer'"

Compiling for Android

You will have to install the Android NDK, and point the $NDK_ROOT environment variable to the NDK path: e.g. export NDK_ROOT=/opt/android-ndk (without a trailing / character).

Next, the easy way is to make a standalone Android toolchain with the following command:

$ $NDK_ROOT/build/tools/make_standalone_toolchain.py --arch=arm64 --api 21 --install-dir=/tmp/android-toolchain

Now you can compile the example by running:

$ make -j -C _gnu-make/ platform=android architecture=arm64 CC=/tmp/android-toolchain/bin/aarch64-linux-android-gcc CXX=/tmp/android-toolchain/bin/aarch64-linux-android-g++

Loading page aligned library straight from APKs is supported. To test, use the following:

$ zip -Z store app bin/android/library.so
$ zipalign -v -f -p 4 ./app.zip ./app.apk

Then copy bin/android/executable and app.apk to your Android device and there launch:

$ ./executable --load-library=$PWD/app.apk!/bin/android/library.so
Comments
  • netbsd does not have KERN_PROC_PATHNAME but /proc/self/exe

    netbsd does not have KERN_PROC_PATHNAME but /proc/self/exe

    Hi, thanx for your library ! (I am using it for my own project yabasic)

    Found it is not working out of the box on netbsd but a simple modification helps.

    Tested for netbsd 8.0

    Thanx for merging (if you do …) !

    opened by marcIhm 15
  • Building without _DEFAULT_SOURCE or _XOPEN_SOURCE >= 500 and without -Werror=implicit-function-declaration ends up in a segfault

    Building without _DEFAULT_SOURCE or _XOPEN_SOURCE >= 500 and without -Werror=implicit-function-declaration ends up in a segfault

    When using the following C standard setting in CMake, the build give warnings. But worse my executable will now segfault:

    set(CMAKE_C_STANDARD 99)
    set(CMAKE_C_STANDARD_REQUIRED YES)
    set(CMAKE_C_EXTENSIONS NO)
    

    Build output:

    [build] ../lib/whereami/whereami.c: In function ‘wai_getExecutablePath’:
    [build] ../lib/whereami/whereami.c:197:16: warning: implicit declaration of function ‘realpath’ [-Wimplicit-function-declaration]
    [build]   197 |     resolved = realpath(WAI_PROC_SELF_EXE, buffer);
    [build]       |                ^~~~~~~~
    [build] ../lib/whereami/whereami.c:197:14: warning: assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
    [build]   197 |     resolved = realpath(WAI_PROC_SELF_EXE, buffer);
    [build]       |              ^
    [build] ../lib/whereami/whereami.c: In function ‘wai_getModulePath’:
    [build] ../lib/whereami/whereami.c:276:20: warning: assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
    [build]   276 |           resolved = realpath(path, buffer);
    [build]       |                    ^
    

    Run-time crash / segfault at line 201 in whereami.c:

        length = (int)strlen(resolved);
    
    invalid 
    opened by danger89 12
  • Build fails on macOS when not defining _DARWIN_C_SOURCE

    Build fails on macOS when not defining _DARWIN_C_SOURCE

    Sorry to both you again. While the realpath issue is solved.

    I'm trying to build my project which includes whereami towards MacOS platform now.

    Resulting into the following errors now:

     /Users/runner/work/Browser/Browser/lib/whereami/whereami.c:431:5: error: use of undeclared identifier 'Dl_info'
        Dl_info info;
        ^
    /Users/runner/work/Browser/Browser/lib/whereami/whereami.c:433:9: error: implicit declaration of function 'dladdr' is invalid in C99 [-Werror,-Wimplicit-function-declaration]
        if (dladdr(WAI_RETURN_ADDRESS(), &info))
    

    I tried to raise the _XOPEN_SOURCE from 500 to even 700, without luck (target_compile_definitions(${LIBARY_NAME} PUBLIC _XOPEN_SOURCE=700)). I try to enable C extensions. Also without any luck...

    Do you have missing includes in the MacOS ifdef section? I'm the cmake build system for my code. Both native Linux & Windows cross-compile builds are working.

    I'm out of ideas. Thanks in advance!

    Regards, Melroy van den Berg

    opened by danger89 8
  • Precompile header

    Precompile header

    Hello, I'm trying to using your library in a project, using an older version of Visual Studio 2003 (I'm stuck with this version to maintaining a legacy app which needs the compiler and linker shipped with that VS version - sad story 😭 ).

    If I set "use precompiled header" in project properties, I have this error on building whereami.c(680): fatal error C1010: unexpected end of file while looking for precompiled header directive.

    If I don't use precompiled header in project properties, I have this error whereami.c(56): fatal error C1083: Cannot open include file: 'intrin.h': No such file or directory This header is not present on Windows installation (I searched entire C drive)

    What can I do to use your library with precompiled header?

    invalid question 
    opened by mjako78 7
  • Add __BSD_VISIBLE define

    Add __BSD_VISIBLE define

    Some projects including this as a simple file dependency might have e.g. _ANSI_SOURCE defined in the compiler args, which unsets __BSD_VISIBLE, which hides the u_int type on FreeBSD.

    opened by valpackett 6
  • OpenBSD support?

    OpenBSD support?

    The current code for FreeBSD and friends does not work on OpenBSD (I've been told there's no more support for /kern and /proc on that platform). Any ideas on how to do this on OpenBSD?

    enhancement 
    opened by kpeeters 6
  • SunOS Support

    SunOS Support

    I added support for sunOS based on the answer on stackoverflow

    This is tested on my dev machines (Sunos_x86 and Sparc) and working. However its a simple copy/past job

    opened by willtho89 5
  • FreeBSD not supported

    FreeBSD not supported

    Please consider adding FreeBSD support.

    Something like:

    #include <sys/types.h>
    #include <sys/sysctl.h>
    #include <string.h>
    
    WAI_FUNCSPEC
    int WAI_PREFIX(getExecutablePath)(char* out, int capacity, int* dirname_length)
    {
        char exePath[2048];
        int mib[4];  mib[0] = CTL_KERN;  mib[1] = KERN_PROC;  mib[2] = KERN_PROC_PATHNAME;  mib[3] = -1;
        size_t len = sizeof(exePath)-1;
        *exePath = '\0';
        if (sysctl(mib, 4, exePath, &len, NULL, 0) != 0)
            exePath[0] = '\0';
        else
            exePath[sizeof(exePath)-1] = '\0';
    
        char* resolved = exePath;
    
        int length = (int)strlen(resolved);
        if (length <= capacity)
        {
          memcpy(out, resolved, length);
    
          if (dirname_length)
          {
            int i;
    
            for (i = length - 1; i >= 0; --i)
            {
              if (out[i] == '/')
              {
                *dirname_length = i;
                break;
              }
            }
          }
        }
    
        return length;
    }
    
    
    enhancement 
    opened by dafixa 5
  • CMake support

    CMake support

    Providing a `CMakeLists.txt instead of platform specific build files would improve a couple of things:

    • Instead of one file per build system, it would only be necessary to maintain one CMakeLists.txt.
    • It would cover support for some build systems not currently supported (ninja for example).
    • Bazel recently gained support for consuming cmake files.

    I haven't done any extensive testing, but I did write a simple CMakeLists.txt for wip-cpp branch:

    project( whereami )
    cmake_minimum_required( VERSION 2.8 )
    
    add_library( ${PROJECT_NAME} STATIC whereami.c whereami.h )
    set_target_properties( ${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON )
    target_include_directories( ${PROJECT_NAME} SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
    
    add_library( ${PROJECT_NAME}-cpp STATIC whereami++.cpp whereami++.h )
    set_target_properties( ${PROJECT_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON )
    target_include_directories( ${PROJECT_NAME}-cpp SYSTEM PUBLIC ${CMAKE_CURRENT_SOURCE_DIR} )
    target_link_libraries( ${PROJECT_NAME}-cpp ${PROJECT_NAME} )
    

    It is able to produce libwhereami.a and libwhereami-cpp.a and the simplest possible example worked as expected:

    #include <iostream>
    #include "../src/whereami++.h"
    int main(void)
    {
            std::cout << whereami::getExecutablePath();
            return 0;
    }
    

    Executable was compiled with g++ -c foo.cpp -o foo.o and linked with g++ foo.o libwhereami++.a -o foo.

    Alternatively, providing pkgconfig files would also work with cmake.

    wontdo 
    opened by bstaletic 4
  • Unbreak on more BSDs

    Unbreak on more BSDs

    DragonFly* and NetBSD** recently implemented KERN_PROC_PATHNAME but ...

    src/whereami.c:655:2: error: unsupported platform
    #error unsupported platform
     ^
    1 error generated.
    
    opened by jbeich 4
  • Error when compile cpp project

    Error when compile cpp project

    Hi.

    I've tried to compile in Debian 9 using gcc/g++ in versions: 6.3, 4.9, 4.8 and clang 3.4, but show many errors. See:

    make: Entering directory '/home/usuario/where2cpp/whereami-wip-cpp/_gnu-make'
    mkdir -p /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64
    mkdir -p /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64
    mkdir -p /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64
    g++ -x c++ -I /home/usuario/where2cpp/whereami-wip-cpp/src  -O2 -g -Wall -pedantic -Werror -Wshadow -Wuseless-cast -fpic /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp -ldl -shared -o /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/library-cxx.so
    g++ -std=c++11 -x c++ -I /home/usuario/where2cpp/whereami-wip-cpp/src  -O2 -g -Wall -pedantic -Werror -Wshadow -Wuseless-cast -fpic /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp /home/usuario/where2cpp/whereami-wip-cpp/example/executable.cpp -ldl -o /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx11
    g++ -std=c++03 -x c++ -I /home/usuario/where2cpp/whereami-wip-cpp/src  -O2 -g -Wall -pedantic -Werror -Wshadow -Wuseless-cast -fpic /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp /home/usuario/where2cpp/whereami-wip-cpp/example/executable.cpp -ldl -o /home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx
    In file included from /usr/include/c++/6/stdlib.h:36:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:23,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/c++/6/cstdlib:124:11: error: ‘::div_t’ has not been declared
       using ::div_t;
               ^~~~~
    /usr/include/c++/6/cstdlib:125:11: error: ‘::ldiv_t’ has not been declared
       using ::ldiv_t;
               ^~~~~~
    /usr/include/c++/6/cstdlib:127:11: error: ‘::abort’ has not been declared
       using ::abort;
               ^~~~~
    /usr/include/c++/6/cstdlib:128:11: error: ‘::abs’ has not been declared
       using ::abs;
               ^~~
    /usr/include/c++/6/cstdlib:129:11: error: ‘::atexit’ has not been declared
       using ::atexit;
               ^~~~~~
    /usr/include/c++/6/cstdlib:135:11: error: ‘::atof’ has not been declared
       using ::atof;
               ^~~~
    /usr/include/c++/6/cstdlib:136:11: error: ‘::atoi’ has not been declared
       using ::atoi;
               ^~~~
    /usr/include/c++/6/cstdlib:137:11: error: ‘::atol’ has not been declared
       using ::atol;
               ^~~~
    /usr/include/c++/6/cstdlib:138:11: error: ‘::bsearch’ has not been declared
       using ::bsearch;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:139:11: error: ‘::calloc’ has not been declared
       using ::calloc;
               ^~~~~~
    /usr/include/c++/6/cstdlib:140:11: error: ‘::div’ has not been declared
       using ::div;
               ^~~
    /usr/include/c++/6/cstdlib:141:11: error: ‘::exit’ has not been declared
       using ::exit;
               ^~~~
    /usr/include/c++/6/cstdlib:142:11: error: ‘::free’ has not been declared
       using ::free;
               ^~~~
    /usr/include/c++/6/cstdlib:143:11: error: ‘::getenv’ has not been declared
       using ::getenv;
               ^~~~~~
    /usr/include/c++/6/cstdlib:144:11: error: ‘::labs’ has not been declared
       using ::labs;
               ^~~~
    /usr/include/c++/6/cstdlib:145:11: error: ‘::ldiv’ has not been declared
       using ::ldiv;
               ^~~~
    /usr/include/c++/6/cstdlib:146:11: error: ‘::malloc’ has not been declared
       using ::malloc;
               ^~~~~~
    /usr/include/c++/6/cstdlib:148:11: error: ‘::mblen’ has not been declared
       using ::mblen;
               ^~~~~
    /usr/include/c++/6/cstdlib:149:11: error: ‘::mbstowcs’ has not been declared
       using ::mbstowcs;
               ^~~~~~~~
    /usr/include/c++/6/cstdlib:150:11: error: ‘::mbtowc’ has not been declared
       using ::mbtowc;
               ^~~~~~
    /usr/include/c++/6/cstdlib:152:11: error: ‘::qsort’ has not been declared
       using ::qsort;
               ^~~~~
    /usr/include/c++/6/cstdlib:158:11: error: ‘::rand’ has not been declared
       using ::rand;
               ^~~~
    /usr/include/c++/6/cstdlib:159:11: error: ‘::realloc’ has not been declared
       using ::realloc;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:160:11: error: ‘::srand’ has not been declared
       using ::srand;
               ^~~~~
    /usr/include/c++/6/cstdlib:161:11: error: ‘::strtod’ has not been declared
       using ::strtod;
               ^~~~~~
    /usr/include/c++/6/cstdlib:162:11: error: ‘::strtol’ has not been declared
       using ::strtol;
               ^~~~~~
    /usr/include/c++/6/cstdlib:163:11: error: ‘::strtoul’ has not been declared
       using ::strtoul;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:164:11: error: ‘::system’ has not been declared
       using ::system;
               ^~~~~~
    /usr/include/c++/6/cstdlib:166:11: error: ‘::wcstombs’ has not been declared
       using ::wcstombs;
               ^~~~~~~~
    /usr/include/c++/6/cstdlib:167:11: error: ‘::wctomb’ has not been declared
       using ::wctomb;
               ^~~~~~
    /usr/include/c++/6/cstdlib:220:11: error: ‘::lldiv_t’ has not been declared
       using ::lldiv_t;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:226:11: error: ‘::_Exit’ has not been declared
       using ::_Exit;
               ^~~~~
    /usr/include/c++/6/cstdlib:230:11: error: ‘::llabs’ has not been declared
       using ::llabs;
               ^~~~~
    /usr/include/c++/6/cstdlib:236:11: error: ‘::lldiv’ has not been declared
       using ::lldiv;
               ^~~~~
    /usr/include/c++/6/cstdlib:247:11: error: ‘::atoll’ has not been declared
       using ::atoll;
               ^~~~~
    /usr/include/c++/6/cstdlib:248:11: error: ‘::strtoll’ has not been declared
       using ::strtoll;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:249:11: error: ‘::strtoull’ has not been declared
       using ::strtoull;
               ^~~~~~~~
    /usr/include/c++/6/cstdlib:251:11: error: ‘::strtof’ has not been declared
       using ::strtof;
               ^~~~~~
    /usr/include/c++/6/cstdlib:252:11: error: ‘::strtold’ has not been declared
       using ::strtold;
               ^~~~~~~
    /usr/include/c++/6/cstdlib:260:22: error: ‘__gnu_cxx::lldiv_t’ has not been declared
       using ::__gnu_cxx::lldiv_t;
                          ^~~~~~~
    /usr/include/c++/6/cstdlib:262:22: error: ‘__gnu_cxx::_Exit’ has not been declared
       using ::__gnu_cxx::_Exit;
                          ^~~~~
    /usr/include/c++/6/cstdlib:264:22: error: ‘__gnu_cxx::llabs’ has not been declared
       using ::__gnu_cxx::llabs;
                          ^~~~~
    /usr/include/c++/6/cstdlib:265:22: error: ‘__gnu_cxx::div’ has not been declared
       using ::__gnu_cxx::div;
                          ^~~
    /usr/include/c++/6/cstdlib:266:22: error: ‘__gnu_cxx::lldiv’ has not been declared
       using ::__gnu_cxx::lldiv;
                          ^~~~~
    /usr/include/c++/6/cstdlib:268:22: error: ‘__gnu_cxx::atoll’ has not been declared
       using ::__gnu_cxx::atoll;
                          ^~~~~
    /usr/include/c++/6/cstdlib:269:22: error: ‘__gnu_cxx::strtof’ has not been declared
       using ::__gnu_cxx::strtof;
                          ^~~~~~
    /usr/include/c++/6/cstdlib:270:22: error: ‘__gnu_cxx::strtoll’ has not been declared
       using ::__gnu_cxx::strtoll;
                          ^~~~~~~
    /usr/include/c++/6/cstdlib:271:22: error: ‘__gnu_cxx::strtoull’ has not been declared
       using ::__gnu_cxx::strtoull;
                          ^~~~~~~~
    /usr/include/c++/6/cstdlib:272:22: error: ‘__gnu_cxx::strtold’ has not been declared
       using ::__gnu_cxx::strtold;
                          ^~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:23:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/c++/6/stdlib.h:38:12: error: ‘whereami::{anonymous}::std::abort’ has not been declared
     using std::abort;
                ^~~~~
    /usr/include/c++/6/stdlib.h:39:12: error: ‘whereami::{anonymous}::std::atexit’ has not been declared
     using std::atexit;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:40:12: error: ‘whereami::{anonymous}::std::exit’ has not been declared
     using std::exit;
                ^~~~
    /usr/include/c++/6/stdlib.h:51:12: error: ‘whereami::{anonymous}::std::div_t’ has not been declared
     using std::div_t;
                ^~~~~
    /usr/include/c++/6/stdlib.h:52:12: error: ‘whereami::{anonymous}::std::ldiv_t’ has not been declared
     using std::ldiv_t;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:55:12: error: ‘whereami::{anonymous}::std::atof’ has not been declared
     using std::atof;
                ^~~~
    /usr/include/c++/6/stdlib.h:56:12: error: ‘whereami::{anonymous}::std::atoi’ has not been declared
     using std::atoi;
                ^~~~
    /usr/include/c++/6/stdlib.h:57:12: error: ‘whereami::{anonymous}::std::atol’ has not been declared
     using std::atol;
                ^~~~
    /usr/include/c++/6/stdlib.h:58:12: error: ‘whereami::{anonymous}::std::bsearch’ has not been declared
     using std::bsearch;
                ^~~~~~~
    /usr/include/c++/6/stdlib.h:59:12: error: ‘whereami::{anonymous}::std::calloc’ has not been declared
     using std::calloc;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:61:12: error: ‘whereami::{anonymous}::std::free’ has not been declared
     using std::free;
                ^~~~
    /usr/include/c++/6/stdlib.h:62:12: error: ‘whereami::{anonymous}::std::getenv’ has not been declared
     using std::getenv;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:63:12: error: ‘whereami::{anonymous}::std::labs’ has not been declared
     using std::labs;
                ^~~~
    /usr/include/c++/6/stdlib.h:64:12: error: ‘whereami::{anonymous}::std::ldiv’ has not been declared
     using std::ldiv;
                ^~~~
    /usr/include/c++/6/stdlib.h:65:12: error: ‘whereami::{anonymous}::std::malloc’ has not been declared
     using std::malloc;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:67:12: error: ‘whereami::{anonymous}::std::mblen’ has not been declared
     using std::mblen;
                ^~~~~
    /usr/include/c++/6/stdlib.h:68:12: error: ‘whereami::{anonymous}::std::mbstowcs’ has not been declared
     using std::mbstowcs;
                ^~~~~~~~
    /usr/include/c++/6/stdlib.h:69:12: error: ‘whereami::{anonymous}::std::mbtowc’ has not been declared
     using std::mbtowc;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:71:12: error: ‘whereami::{anonymous}::std::qsort’ has not been declared
     using std::qsort;
                ^~~~~
    /usr/include/c++/6/stdlib.h:72:12: error: ‘whereami::{anonymous}::std::rand’ has not been declared
     using std::rand;
                ^~~~
    /usr/include/c++/6/stdlib.h:73:12: error: ‘whereami::{anonymous}::std::realloc’ has not been declared
     using std::realloc;
                ^~~~~~~
    /usr/include/c++/6/stdlib.h:74:12: error: ‘whereami::{anonymous}::std::srand’ has not been declared
     using std::srand;
                ^~~~~
    /usr/include/c++/6/stdlib.h:75:12: error: ‘whereami::{anonymous}::std::strtod’ has not been declared
     using std::strtod;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:76:12: error: ‘whereami::{anonymous}::std::strtol’ has not been declared
     using std::strtol;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:77:12: error: ‘whereami::{anonymous}::std::strtoul’ has not been declared
     using std::strtoul;
                ^~~~~~~
    /usr/include/c++/6/stdlib.h:78:12: error: ‘whereami::{anonymous}::std::system’ has not been declared
     using std::system;
                ^~~~~~
    /usr/include/c++/6/stdlib.h:80:12: error: ‘whereami::{anonymous}::std::wcstombs’ has not been declared
     using std::wcstombs;
                ^~~~~~~~
    /usr/include/c++/6/stdlib.h:81:12: error: ‘whereami::{anonymous}::std::wctomb’ has not been declared
     using std::wctomb;
                ^~~~~~
    In file included from /usr/include/stdio.h:935:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::vprintf(const char*, __va_list_tag*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:38:40: error: cannot convert ‘whereami::{anonymous}::_IO_FILE*’ to ‘FILE* {aka _IO_FILE*}’ for argument ‘1’ to ‘int whereami::{anonymous}::vfprintf(FILE*, const char*, __va_list_tag*)’
       return vfprintf (stdout, __fmt, __arg);
                                            ^
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::fgetc_unlocked(FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:55:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:55:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:55:10: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘whereami::{anonymous}::_IO_FILE*’ for argument ‘1’ to ‘int whereami::{anonymous}::__uflow(whereami::{anonymous}::_IO_FILE*)’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: class type ‘FILE {aka _IO_FILE}’ is incomplete
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:55:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::getc_unlocked(FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:65:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:65:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:65:10: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘whereami::{anonymous}::_IO_FILE*’ for argument ‘1’ to ‘int whereami::{anonymous}::__uflow(whereami::{anonymous}::_IO_FILE*)’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: class type ‘FILE {aka _IO_FILE}’ is incomplete
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:65:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_getc_unlocked (__fp);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::fputc_unlocked(int, FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:90:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:90:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:90:10: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘whereami::{anonymous}::_IO_FILE*’ for argument ‘1’ to ‘int whereami::{anonymous}::__overflow(whereami::{anonymous}::_IO_FILE*, int)’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: class type ‘FILE {aka _IO_FILE}’ is incomplete
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:90:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::putc_unlocked(int, FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:100:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:100:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:100:10: error: cannot convert ‘FILE* {aka _IO_FILE*}’ to ‘whereami::{anonymous}::_IO_FILE*’ for argument ‘1’ to ‘int whereami::{anonymous}::__overflow(whereami::{anonymous}::_IO_FILE*, int)’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: class type ‘FILE {aka _IO_FILE}’ is incomplete
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:100:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_putc_unlocked (__c, __stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::feof_unlocked(FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:127:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_feof_unlocked (__stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    In file included from /usr/include/stdio.h:74:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:172,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/x86_64-linux-gnu/bits/stdio.h: In function ‘int whereami::{anonymous}::ferror_unlocked(FILE*)’:
    /usr/include/x86_64-linux-gnu/bits/stdio.h:134:10: error: invalid use of incomplete type ‘FILE {aka struct _IO_FILE}’
       return _IO_ferror_unlocked (__stream);
              ^
    In file included from /usr/include/wchar.h:36:0,
                     from /usr/include/c++/6/cwchar:44,
                     from /usr/include/c++/6/bits/postypes.h:40,
                     from /usr/include/c++/6/bits/char_traits.h:40,
                     from /usr/include/c++/6/string:40,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:8,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:
    /usr/include/stdio.h:44:8: note: forward declaration of ‘FILE {aka struct _IO_FILE}’
     struct _IO_FILE;
            ^~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp: In constructor ‘whereami::whereami_path_t::whereami_path_t(whereami_string_t&, int)’:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:51:79: error: declaration of ‘dirname_length’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t& path, int dirname_length)
                                                                                   ^
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:51:9: note: shadowed declaration is here
         int dirname_length;
             ^~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:51:79: error: declaration of ‘path’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t& path, int dirname_length)
                                                                                   ^
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:50:23: note: shadowed declaration is here
         whereami_string_t path;
                           ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp: At global scope:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:58:8: error: ‘ostream’ in namespace ‘whereami::{anonymous}::std’ does not name a type
       std::ostream& operator<<(std::ostream& os, const whereami_path_t& path)
            ^~~~~~~
    In file included from /usr/include/c++/6/cstdlib:75:0,
                     from /usr/include/c++/6/stdlib.h:36,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:23,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/stdlib.h:485:18: error: ‘int whereami::{anonymous}::at_quick_exit(void (*)()) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" int at_quick_exit (void (*__func) (void))
                      ^~~~~~~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:174:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/string.h:101:20: error: ‘void* whereami::{anonymous}::rawmemchr(void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *rawmemchr (void *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:103:26: error: ‘const void* whereami::{anonymous}::rawmemchr(const void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *rawmemchr (const void *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:112:20: error: ‘void* whereami::{anonymous}::memrchr(void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *memrchr (void *__s, int __c, size_t __n)
                        ^~~~~~~
    /usr/include/string.h:114:26: error: ‘const void* whereami::{anonymous}::memrchr(const void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
                              ^~~~~~~
    /usr/include/string.h:267:20: error: ‘char* whereami::{anonymous}::strchrnul(char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strchrnul (char *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:269:26: error: ‘const char* whereami::{anonymous}::strchrnul(const char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strchrnul (const char *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:362:20: error: ‘char* whereami::{anonymous}::strcasestr(char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strcasestr (char *__haystack, const char *__needle)
                        ^~~~~~~~~~
    /usr/include/string.h:364:26: error: ‘const char* whereami::{anonymous}::strcasestr(const char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strcasestr (const char *__haystack,
                              ^~~~~~~~~~
    /usr/include/string.h:594:20: error: ‘char* whereami::{anonymous}::basename(char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *basename (char *__filename)
                        ^~~~~~~~
    /usr/include/string.h:596:26: error: ‘const char* whereami::{anonymous}::basename(const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *basename (const char *__filename)
                              ^~~~~~~~
    cc1plus: all warnings being treated as errors
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp: In constructor ‘whereami::whereami_path_t::whereami_path_t(whereami_string_t&&, int)’:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:46:82: error: declaration of ‘dirname_length’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t&& path, int dirname_length) noexcept
                                                                                      ^~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:51:9: note: shadowed declaration is here
         int dirname_length;
             ^~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:46:82: error: declaration of ‘path’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t&& path, int dirname_length) noexcept
                                                                                      ^~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:50:23: note: shadowed declaration is here
         whereami_string_t path;
                           ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp: In constructor ‘whereami::whereami_path_t::whereami_path_t(whereami_string_t&&, int)’:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:46:82: error: declaration of ‘dirname_length’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t&& path, int dirname_length) noexcept
                                                                                      ^~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:51:9: note: shadowed declaration is here
         int dirname_length;
             ^~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:46:82: error: declaration of ‘path’ shadows a member of ‘whereami::whereami_path_t’ [-Werror=shadow]
       whereami_path_t::whereami_path_t(whereami_string_t&& path, int dirname_length) noexcept
                                                                                      ^~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:6:0:
    /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.h:50:23: note: shadowed declaration is here
         whereami_string_t path;
                           ^~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:174:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/string.h: At global scope:
    /usr/include/string.h:101:20: error: ‘void* whereami::{anonymous}::rawmemchr(void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *rawmemchr (void *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:103:26: error: ‘const void* whereami::{anonymous}::rawmemchr(const void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *rawmemchr (const void *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:112:20: error: ‘void* whereami::{anonymous}::memrchr(void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *memrchr (void *__s, int __c, size_t __n)
                        ^~~~~~~
    /usr/include/string.h:114:26: error: ‘const void* whereami::{anonymous}::memrchr(const void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
                              ^~~~~~~
    /usr/include/string.h:267:20: error: ‘char* whereami::{anonymous}::strchrnul(char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strchrnul (char *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:269:26: error: ‘const char* whereami::{anonymous}::strchrnul(const char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strchrnul (const char *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:362:20: error: ‘char* whereami::{anonymous}::strcasestr(char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strcasestr (char *__haystack, const char *__needle)
                        ^~~~~~~~~~
    /usr/include/string.h:364:26: error: ‘const char* whereami::{anonymous}::strcasestr(const char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strcasestr (const char *__haystack,
                              ^~~~~~~~~~
    /usr/include/string.h:594:20: error: ‘char* whereami::{anonymous}::basename(char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *basename (char *__filename)
                        ^~~~~~~~
    /usr/include/string.h:596:26: error: ‘const char* whereami::{anonymous}::basename(const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *basename (const char *__filename)
                              ^~~~~~~~
    In file included from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami.c:174:0,
                     from /home/usuario/where2cpp/whereami-wip-cpp/src/whereami++.cpp:15:
    /usr/include/string.h: At global scope:
    /usr/include/string.h:101:20: error: ‘void* whereami::{anonymous}::rawmemchr(void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *rawmemchr (void *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:103:26: error: ‘const void* whereami::{anonymous}::rawmemchr(const void*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *rawmemchr (const void *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:112:20: error: ‘void* whereami::{anonymous}::memrchr(void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" void *memrchr (void *__s, int __c, size_t __n)
                        ^~~~~~~
    /usr/include/string.h:114:26: error: ‘const void* whereami::{anonymous}::memrchr(const void*, int, size_t) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const void *memrchr (const void *__s, int __c, size_t __n)
                              ^~~~~~~
    /usr/include/string.h:267:20: error: ‘char* whereami::{anonymous}::strchrnul(char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strchrnul (char *__s, int __c)
                        ^~~~~~~~~
    /usr/include/string.h:269:26: error: ‘const char* whereami::{anonymous}::strchrnul(const char*, int) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strchrnul (const char *__s, int __c)
                              ^~~~~~~~~
    /usr/include/string.h:362:20: error: ‘char* whereami::{anonymous}::strcasestr(char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *strcasestr (char *__haystack, const char *__needle)
                        ^~~~~~~~~~
    /usr/include/string.h:364:26: error: ‘const char* whereami::{anonymous}::strcasestr(const char*, const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *strcasestr (const char *__haystack,
                              ^~~~~~~~~~
    /usr/include/string.h:594:20: error: ‘char* whereami::{anonymous}::basename(char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" char *basename (char *__filename)
                        ^~~~~~~~
    /usr/include/string.h:596:26: error: ‘const char* whereami::{anonymous}::basename(const char*) throw ()’ declared ‘static’ but never defined [-Werror=unused-function]
     extern "C++" const char *basename (const char *__filename)
                              ^~~~~~~~
    cc1plus: all warnings being treated as errors
    cc1plus: all warnings being treated as errors
    Makefile:122: recipe for target '/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx' failed
    make: *** [/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx] Error 1
    make: ** Esperando que outros processos terminem.
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘void twain_32(unsigned char*, unsigned char*, int)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:17:63: error: ‘do_sha1_file’ was not declared in this scope
         string hash = do_sha1_file( whereami::getExecutablePath() );
                                                                   ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:22:18: error: ‘BYTE’ was not declared in this scope
       t_acct[k-1] = (BYTE)src[k];
                      ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:27:69: error: ‘stringToLower’ was not declared in this scope
      string resultado_a = encrypt(hash, alphabet1, stringToLower(ts_acct));
                                                                         ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:27:70: error: ‘encrypt’ was not declared in this scope
      string resultado_a = encrypt(hash, alphabet1, stringToLower(ts_acct));
                                                                          ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:35:22: error: ‘BYTE’ was not declared in this scope
       novopacket[i+1] = (BYTE)c_a[i];
                          ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:38:20: error: ‘BYTE’ was not declared in this scope
       novopacket[i] = (BYTE)src[i];
                        ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:44:13: error: ‘BYTE’ was not declared in this scope
       src[i] = (BYTE)novopacket[i];
                 ^~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:28:14: error: unused variable ‘c_a’ [-Werror=unused-variable]
      char const* c_a = resultado_a.c_str();
                  ^~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘std::__cxx11::string do_sha1_file(const char*)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:52:28: error: ‘sha1check’ was not declared in this scope
      if (sha1check(argv, digest))
                                ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:56:37: error: ‘bin2hex’ was not declared in this scope
      bin2hex(digest, sizeof(digest), str);
                                         ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘int sha1check(const char*, unsigned char*)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:63:20: error: ‘MAX_BUF_LEN’ was not declared in this scope
      unsigned char buf[MAX_BUF_LEN];
                        ^~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:77:15: error: ‘buf’ was not declared in this scope
       len = fread(buf, 1, MAX_BUF_LEN, pf);
                   ^~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘void bin2hex(unsigned char*, int, char*)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:98:41: error: ‘_snprintf’ was not declared in this scope
       _snprintf(&hex[j], len, "%02x", src[i]);
                                             ^
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘bool belongsTo(std::__cxx11::string, std::__cxx11::string)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:104:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
      for (int k = 0; k < checkstring.length(); k++)
                      ~~^~~~~~~~~~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘std::__cxx11::string stringToUpper(std::__cxx11::string)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:123:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
      for (int i = 0; i < oString.length(); i++) {
                      ~~^~~~~~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘std::__cxx11::string stringToLower(std::__cxx11::string)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:131:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
      for (int i = 0; i < oString.length(); i++) {
                      ~~^~~~~~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp: In function ‘std::__cxx11::string subs(std::__cxx11::string, std::__cxx11::string, std::__cxx11::string)’:
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:176:20: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
      for (int i = 0; i < ptext.length(); i++)
                      ~~^~~~~~~~~~~~~~~~
    /home/usuario/where2cpp/whereami-wip-cpp/example/library.cpp:181:22: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
        for (int j = 0; j < palphabet.length(); j++)
                        ~~^~~~~~~~~~~~~~~~~~~~
    cc1plus: all warnings being treated as errors
    Makefile:146: recipe for target '/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/library-cxx.so' failed
    make: *** [/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/library-cxx.so] Error 1
    Makefile:127: recipe for target '/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx11' failed
    make: *** [/home/usuario/where2cpp/whereami-wip-cpp/bin/linux-x86_64/executable-cxx11] Error 1
    make: Leaving directory '/home/usuario/where2cpp/whereami-wip-cpp/_gnu-make'
    [email protected]:~/where2cpp/whereami-wip-cpp$ 
    

    Is that some solution for this? Thanks for this project!

    bug branch available 
    opened by nogu3ira 3
  • solaris fix

    solaris fix

    This patch fixes the Solaris support (tested on Solaris 10 and 11).

    While the existing getExecutablePath() code works fine on Solaris the getModulePath() does not work. The code assumes that the /proc/self/map file on Solaris has the same syntax as the /proc/self/maps file on Linux. This is not the case, actually the /proc/self/map is even a binary file, see: https://docs.oracle.com/cd/E19253-01/816-5174/proc-4/index.html The dladdr() based code that is already used for other platforms in whereami however works fine on Solaris too. I added another copy of it (there is already is more than one) - this maybe could be merged.

    opened by tkoecker 0
  • added aix support

    added aix support

    This patch adds support for AIX (tested with AIX 6.1, and 7).

    getExecutablePath assumes that the current working directory was not changed since the program start. To my knowledge there is no way to get the full path to the executable (except to get the inode of the executable from /proc//map, and to traverse the whole filesystem searching for the file with that inode number).

    opened by tkoecker 0
  • Return std::string / C++ implementation

    Return std::string / C++ implementation

    The current implementation works with raw pointers. How about porting this to C++ returning a std::string instead (at least as a wrapper) for easier and less error-prone usage?

    branch available 
    opened by Flamefire 6
Owner
Gregory Pakosz
"If You're Not Appearing, You're Disappearing” — Art Blakey
Gregory Pakosz
An asynchronous directory file change watcher module for Windows, macOS and Linux wrapped for V

A V module for asynchronously watching for file changes in a directory. The module is essentially a wrapper for septag/dmon. It works for Windows, macOS and Linux.

null 18 Dec 14, 2022
Python module to reduce a cmake file to an AST

CMake AST Status Travis CI (Ubuntu) AppVeyor (Windows) Coverage PyPI Licence cmake-ast has been tested against every single CMake module that ships wi

ポリ平方 POLYSQUARE 29 Sep 14, 2022
convert elf file to single c/c++ header file

elf-to-c-header Split ELF to single C/C++ header file

Musa Ünal 2 Nov 4, 2021
A Cobalt Strike Beacon Object File (BOF) project which uses direct system calls to enumerate processes for specific loaded modules or process handles.

FindObjects-BOF A Cobalt Strike Beacon Object File (BOF) project which uses direct system calls to enumerate processes for specific modules or process

Outflank B.V. 247 Dec 28, 2022
A Beacon Object File (BOF) for Cobalt Strike which uses direct system calls to enable WDigest credential caching.

WdToggle A Proof of Concept Cobalt Strike Beacon Object File which uses direct system calls to enable WDigest credential caching and circumvent Creden

Outflank B.V. 205 Dec 3, 2022
Modify Android linker to provide loading module and hook function

fake-linker Chinese document click here Project description Modify Android linker to provide loading module and plt hook features.Please check the det

sanfengAndroid 216 Jan 4, 2023
A linux library to get the file path of the currently running shared library. Emulates use of Win32 GetModuleHandleEx/GetModuleFilename.

whereami A linux library to get the file path of the currently running shared library. Emulates use of Win32 GetModuleHandleEx/GetModuleFilename. usag

Blackle Morisanchetto 3 Sep 24, 2022
[WIP] A Riru module tries to enable Magisk hide for isolated processes.

Riru-IsolatedMagiskHider Background Many applications now detect Magisk for security, Magisk provided "Magisk Hide" to prevent detection, but isolated

残页 562 Jan 3, 2023
Documenting the development of a simple first module.

Your First Module This guide will look at writing a complete module, with many common features in a reduced form. This includes the module initialisat

Open Multiplayer 16 Jun 3, 2021
Linux Kernel module-less implant (backdoor)

0 KOPYCAT - Linux Kernel module-less implant (backdoor) Usage $ make $ sudo insmod kopycat.ko insmod: ERROR: could not insert module kopycat.ko: Inapp

Ilya V. Matveychikov 52 Dec 28, 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 13 Dec 25, 2022
A small and portable INI file library with read/write support

minIni minIni is a portable and configurable library for reading and writing ".INI" files. At just below 900 lines of commented source code, minIni tr

Thiadmer Riemersma 293 Dec 29, 2022
Small configuration file parser library for C.

libConfuse Introduction Documentation Examples Build & Install Origin & References Introduction libConfuse is a configuration file parser library writ

null 419 Dec 14, 2022
Dead simple C logging library contained in a single header (.h) file

Seethe Logging so simple, you only need to include a single header file. seethe supports 6 different log levels (DEBUG, INFO, NOTICE, WARNING, ERROR,

Jason Nguyen 28 Nov 24, 2022
C++ NIF library for the Gamebryo/NetImmerse File Format

nifly C++ NIF library for the Gamebryo/NetImmerse File Format. Created with a clean-room design. Features Reading and writing NIF files (Gamebryo/NetI

null 32 Oct 2, 2022
A fast character conversion and transliteration library based on the scheme defined for Japan National Tax Agency (国税庁) 's corporate number (法人番号) system.

jntajis-python Documentation: https://jntajis-python.readthedocs.io/ What's JNTAJIS-python? JNTAJIS-python is a transliteration library, specifically

Open Collector, Inc. 15 Nov 12, 2022
Example of transferring file data over BLE using an Arduino Nano Sense and WebBLE

BLE File Transfer Example of transferring file data over BLE to an Arduino Nano Sense using WebBLE. Overview This is an example of how to use Bluetoot

Pete Warden 33 Dec 19, 2022
featured cs:go internal hack, one file and less than 1000 lines.

singlefile This is a featured CS:GO internal cheat written in less than 1000 lines, and in one C++ file. I encourage you to submit feature suggestions

null 49 Dec 21, 2022
mpiFileUtils - File utilities designed for scalability and performance.

mpiFileUtils provides both a library called libmfu and a suite of MPI-based tools to manage large datasets, which may vary from large directory trees to large files.

High-Performance Computing 133 Jan 4, 2023