Giter Club home page Giter Club logo

libmatoya's Introduction

libmatoya is a cross-platform application development library.

Getting Started

Features

  • Small binary footprint (< 1MB static lib, ~300KB linked)
  • No dependencies outside of what's provided by the OS
  • Single interface compatible with 7 platforms
  • Window creation and input handling
  • Robust game controller support
  • HTTP/HTTPS, WebSockets, TLS protocol wrapper
  • Accelerated video frame and UI draw list rendering
  • JSON parsing and construction
  • Common cryptography tasks
  • ... and more!

If you're interested in being part of the journey, join us on Discord.

Platform Support

Platform Minimum Version
Windows 10
Android Android 9 (API Level 28)
macOS 10.15
iOS / tvOS Coming soon!
Linux *
Web ** Chrome 86, Firefox 79

* Linux relies on certain dependencies being present on the system at run time.
** Safari is currently not supported.

libmatoya's People

Contributors

chrisd1100 avatar dvijayak avatar kitrinx avatar kodikuu avatar namaneo avatar remjey avatar ronaldh-parsec avatar tortue95 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

libmatoya's Issues

Mid-frame key events / imgui

Due to the asynchronous nature of my libmatoya app (with separate event, render, app threads) I am running into an issue where imgui is asserting with a mismatch on io.XXX vs io.KeyMods occasionally when releasing modifier keys (for app shortcuts) - presumably due to the fact that this could happen mid-frame.

What would be the suggested way of dealing with this? So far I am looking at queuing the events and submitting them to imgui in the render thread prior to creating a new frame. Would this approach make sense?

Series 2 Elite

My Xbox Elite Series 2 is updated to the newest firmware and is recognized but the trigger buttons do not register at all while using parsec. My google stadia controller does not work at all as it does not show up.

Gamecube controller support

There seems to be a lack of support for gamecube controllers, is there planned support?

I believe it would also add support for the b0xx

No right mapping for DB9 USB Retro Joystick

Hi

I tried to connect Parsec with an old DB9 Joystick from a Commodore 64. I use a adapter which is connected via USB to the PC. The output is a DB9 connection for the Joystick.

The Problem:
when trying to map the Joystick there is a problem for mapping the left/righ axes and the up/down axes. When mapping left/right the (raw) is for both V0+ and for up/down V1-

When I am using a USB Speedlink Joystick the mapping is correct.
up V1+
right V0+
down V1-
left V0-

Is there maybe a solution for this problem? I explained the problem on discord and there was a supposition that it maybe has something to do with HID handling.

kind regards.

X Error of failed request

I tried to reference the library in a C++ project, but it got an error. My system is Fedora34, and the compiler is g++11.2.1 The output error is as follows
X Error of failed request: BadValue (integer parameter out of range for operation) Major opcode of failed request: 1 (X_CreateWindow) Value in failed request: 0x0 Serial number of failed request: 46 Current serial number in output stream: 48
How to solve it, thank you

MTY_HttpRequest - Mac

MTY_HttpRequest doesn't seem to work correctly on Mac. Built lib from latest source

The request itself works and returns true however the response return parameter is null and the status code is 0. The same request works fine on Windows returning the correct response data and code 200.

MTY_GetLog doesn't reveal any errors

linked -framework Security as this seemed to be a dependency
MacBook Pro (15-inch, 2018)
Big Sur 11.2.3

Upgrade to libssl3

If my understanding is correct, this library is still dependent on libssl1.1:
https://github.com/chrisd1100/libmatoya/blob/686e1d735d0cc0ced74f868e211270b76cd4edf5/src/unix/linux/x11/dl/libssl.h#L153-L158

Newer versions of Linux are shipping without support for libssl1.1. For example, this package is no longer in the default repositories for the Ubuntu 22.04 LTS. This makes getting software that depends on this library, such as Parsec, to run on said Linux distributions/versions more difficult.

As a workaround, I was able to get Parsec to run on ubuntu 22.04 by installing libssl1.1 via:

wget http://security.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb
sudo dpkg -i libssl1.1_1.1.1f-1ubuntu2.16_amd64.deb

However, this is relying on downloading/installing unofficial packages. It would be great if libmatoya could be updated with support for libssl3 so that using it on newer distributions/versions is easier.

Auto-detecting a laptop touchpad as a gamepad

When I first launched parsec on my laptop, I almost immediately noticed severe glitchiness.

The cause for that it auto-detected my touchpad as a gamepad and actually used it right away without any user input, amplifying mouse movement and making navigation of the application impossible.

Steps to reproduce

  1. Launch parsec on a Linux laptop. In my case this is a Dell Latitude 3500 running Arch Linux, but I imagine it will also be reproducible with similar devices or even on a desktop with a touchpad connected, as this is not really unique.
  2. If no glitchiness is happening yet, navigate to the gamepad settings section and your touchpad should pop up immediately and is auto-enabled.
  3. Glitchiness because mouse movement is amplified.

Expected behavior

Do not setup touchpads as gamepads or require manual enabling for such devices. On Linux, many devices have metadata, too, so filtering out touchpads should be trivial. I am fairly sure there are already libraries for this, e.g sdl2, which you can look at for references.

Do your have any plans to add socks5 proxy?

Dear maintainer:
I found while using MTY_HttpSetProxy that it doesn't seem to support socks5.
No matter whether there is a related plan or not, I hope to be restored, thank you! :D

MTY_AudioQueue does not return a value to indicate successful playback or errors

Without knowing if the audio is actually getting through or not, an application playing audio through Matoya doesn't know when or if it needs to recreate it's audio context for, for example, a device change.

This issue can currently be seen on Android when disconnecting a bluetooth device mid-stream.

Proposed fix;

  • Add a uint32_t retval; to the MTY_Audio context struct internally, defaulting to 0 for success. Errors, or error callbacks, should assign their error codes to this context value, which should then be returned at the end of MTY_AudioQueue.

Local Clipboard Corruption on Linux when Non-Text Items are Copied

Problem Description:

When starting Parsec on a Linux system, the local clipboard is corrupted when placing images, files or other items other than text. This issue results in the loss of data and makes it difficult for users to transfer data between different applications.

Steps to Reproduce:

  • Start Parsec on a Linux system.
  • Copy an image or any other non-text item to the clipboard.
  • Attempt to paste the copied item into another application.

Expected behaviour:

The copied item should be pasted as expected, without loss of data.

Actual behaviour:

The pasted item is replaced by the last copied text, and the image/file/... is lost.

Environment:

  • Operating System: All X11 system
  • Parsec version: All
  • libmatoya version: All

Additional Information:

The problem comes from the X11 stock api which has no event on clipboard modifications.
The libmatoya library, to work around this lack, retrieves the clipboard property each time it loses its ownership to another application. This is done to detect any modification of the clipboard content by other applications.
When the libmatoya library recovers the clipboard ownership, it puts back in the clipboard what was added by the previous application. However, when the content is read, it is converted to UTF-8, which results in data loss if the content is not textual.
As a result, the local clipboard is corrupted when non-textual items, such as images or files, are copied.

MTY_AppGetClipboard - multi-lined text

It looks like MTY_AppGetClipboard does not support multi-line text in the clipboard? (The value returned is NULL)

Tested on a windows 10 machine.

Could I be doing something wrong here?

V4 breaking clipcursor on state change out of focus

  1. Launch a game or application that locks the cursor
  2. While in that application, increment app.state

AppRun loop will call app_apply_clip on state change, focus is false as the other application is in focus, so ClipCursor(NULL) is called, breaking the other application's lock.

Screenshots? - Purpose paragraph?

Your project looks interesting. What's the purpose of it? - Normal cross-platform application development, like Qt, wxWidgets, IUP, NappGUI and friends? - Or a super lightweight wrapper over the OS windowing and input systems in order to superimpose another system, for fullscreen or full-window games?

Personally I'm looking for something like Flutter but with close to zero overhead (incl. on binary size). And I want to target C and call into C from dozens of higher level programming languages. Then I want to support WebAssembly and create a JSON DSL to generate GUIs from.

Thanks for your elaboration

event features?

does libmatoya plan to provide event-loop with non-blocking IO and timer??

V4 MTY_MSG_MOUSE_MOTION de-dupe

On use of Alt-Tab or the Windows key, or with Stardock's "Fences" running on the desktop, mouse movements are fired.

These events don't involve clicks or actual movement, and so are duplicate, and need de-duping.

[Feature Request] Font rendering in libmatoya

I've quickly looked through the source code but haven't found anything related to font rendering. Actually a very nice feature would be to implement some sort of font rendering (TTF or old VGA DOS fonts or something else). I believe it will help to replace huge SDL+SDL_ttf libraries in some projects if this would be available in platform independent way in libmatoya.

Black screen when running on Android

As an experiment, I'm developing a RetroArch front-end based on this library. I got it working correctly on Ubuntu, with video, audio and inputs.

Then I tried to setup an Android application using it, and I keep having a black screen on the main Activity (the one I used to initialize the Matoya class). I know the native library is running correctly because I have sound and inputs (I can see those firing up through the logs).

I'm sure the culprit does not come from libmatoya, and I don't think the issue could come from the Java part of the Android application (which is basically 2 lines of code, 5 if we count the onDestroy part). However, I couldn't find any documentation or examples explaining some kind of best-practices about Android.

Not sure what part of my code I can give you to help, honestly. Currently, I'm creating the window with MTY_GFX_GL, I still call MTY_WindowMakeCurrent even though it does not seem to have any effect on Android, and I'm drawing using those two method calls, executed in a dedicated rendering thread:

MTY_WindowDrawQuad(ctx.app, 0, ctx.image, &desc);
MTY_WindowPresent(ctx.app, 0, 1);

Could you (someone) give some advices? In the form of an example project / the correct process flow to implement on the native part / just some tips-and-tricks to be careful of?

Fantastic library by the way, I haven't played with the C language since years and I must say it's a pleasure to go back to it through libmatoya. 🙂

Thanks in advance!

MTY_WindowSetGFX after initialisation (D3D->OpenGL)

Changing gfx api from D3D -> openGL after window initialisation causes all rendering to sieze and produces the following error in the MTY Log

mty_gl_ctx_present: 'wglSwapIntervalEXT' failed with error 0x0

Attempted logic so far:

  1. Pause all rendering operations
  2. Sleep
  3. Set Window Gfx -> MTY_GFX_NONE
  4. Sleep
  5. Set Window Gfx -> MTY_GFX_GL
  6. Sleep
  7. Resume rendering

Changing from openGL -> D3D seems to work okay

Provide dynamically linked libraries

Hi,

I just discovered libmatoya, the project looks truly awesome!

I decided to give it a try and, as a C# developer, I wanted to create bindings for .NET Core... to discover that .NET does not support static library linking at all. Could it be considered to provide builds of dynamically linked libraries as well, or is it technically impossible?

Side note: it's been a while since I've played with C/C++ projects, I hope what I ask makes sense. 🙂

Thanks!

MTY_WindowDesc - specify display index

It would be helpful to be able to specify which display to open a window on. At the moment there doesn't seem to be a way to do this? i.e if I want to open two windows and have window 1 on display 1 and window 2 on display 2 (Or even just open window 1 on display 2 instead of display 1).

In addition to this it would also be helpful to retrieve the current Display configuration i.e what displays are connected, size, scaling, bounds (positioning).

Missing deps of `libjpeg8`

libjpeg8 does not exist in debian bullseye bookworm, but exists on ubuntu. This application that use libtamoya like parsec throw missing MTY_SOLoad: libjpeg.so.8: cannot open shared object file: No such file or directory

❯ dpkg-query -L  libjpeg62-turbo:amd64
/.
/usr
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libjpeg.so.62.3.0
/usr/share
/usr/share/doc
/usr/share/doc/libjpeg62-turbo
/usr/share/doc/libjpeg62-turbo/changelog.Debian.gz
/usr/share/doc/libjpeg62-turbo/changelog.gz
/usr/share/doc/libjpeg62-turbo/copyright
/usr/share/lintian
/usr/share/lintian/overrides
/usr/share/lintian/overrides/libjpeg62-turbo
/usr/lib/x86_64-linux-gnu/libjpeg.so.62

There is hacky way of directly dirty linking libjpeg.so.8 to libjpeg.so.62.3.0 but not preferred.

Arch Linux Window Ghosting

Issue

I was testing this library but I ran into some issues. I get a glitched out screen where it seems that the graphics of the window were not working. I ran 0-minimal, 1-draw, and 2-threaded. I have a windows 11 machine and it works as expected. Any help with this would be appreciated. I would love to start diving into this library.

What I tried

I tested it using OpenGL, Vulkan, and None. I tried enabling and disabling vsync.

Output of neofetch:

image

0-minimal:

image

Result of make in test directory

cc -I../src -O3 -Wall -Wextra -Wno-unused-parameter -Wno-format-overflow -o mty src/test.c ../bin/linux/x86_64/libmatoya.a -lc -lm
[JSON Torture Test] Passed 
[JSON duplication/serialization] Passed 
[JSON UTF-16] Passed 
[MTY_HashCreate] Passed (hashctx != ((void *)0))
[MTY_HashSet (New)] Passed (value == ((void *)0))
[MTY_HashSet (OW)] Passed (value && !strcmp(stringkey, (char *) value))
[MTY_HashGet] Passed (value && !strcmp(stringkey, value))
[MTY_HashSetInt (New)] Passed (value == ((void *)0))
[MTY_HashSetInt (OW)] Passed (value && *(void**)value == intvalue)
[MTY_HashGetInt] Passed (value && value == intvalue)
[MTY_HashGetNextKey (I)] Passed (r): 4294967309
[MTY_HashGetNextKey (S)] Passed (r): 4294967352
[MTY_HashGetNextKeyInt (I)] Passed (r): 4294967309
[MTY_HashGetNextKeyInt (S)] Passed (!r): 4294967352
[MTY_HashPop] Passed (value && !strcmp(stringkey, value))
[MTY_HashPopInt] Passed (value && value == intvalue)
[MTY_HashDestroy] Passed (hashctx == ((void *)0))
[MTY_QueueCreate] Passed (queuectx != ((void *)0))
[MTY_QueueDestroy] Passed (queuectx == ((void *)0))
[MTY_ListCreate] Passed (listctx != ((void *)0))
[MTY_ListGetFirst (Empty)] Passed (node == ((void *)0))
[MTY_ListAppend] Passed (node != ((void *)0))
[MTY_ListRemove] Passed (value && value == intvalue)
[MTY_ListDestroy] Passed (listctx == ((void *)0))
[MTY_GetHostname] Passed (strcmp(hostname, "noname"))
[MTY_GetPlatform] Passed plat > 0: 134217728
[MTY_GetPlatformNoWeb] Passed plat > 0: 134217728
[MTY_IsSupported] Passed (r)
[MTY_GetProcessPath] Passed procpath: /home/patricks/Documents/libmatoya/test/mty
[MTY_GetRunOnStartup] Passed (!r)
[MTY_GetVersionString] Passed verstring: Linux
[MTY_GetVersion] Passed (v == (4 << 8 | 0)): 1024
[MTY_GetTime] Passed (ts > 0): 7746505972
[MTY_Sleep] Passed (100)
[MTY_TimeDiff] Passed (diff >= 99.0f && diff <= 115.0f): 100.08
[MTY_GetDir1] Passed (strlen(get_dir))
[MTY_GetDir2] Passed (strlen(get_dir))
[MTY_GetDir3] Passed (strlen(get_dir))
[MTY_GetDir4] Passed (strlen(cwd))
[MTY_JoinPath] Passed (strlen(full_path) > strlen(origin_file) + strlen(cwd))
[MTY_WriteFile] Passed (MTY_FileExists(full_path))
[MTY_ReadFile] Passed (strlen(g_address_2) == strlen(file_g_address))
file_vfprintf: 'vfprintf' failed with ferror 0
[MTY_AppendTextToFile] Passed (g_address_2[0] == 'a' && g_address_2[1] == 'F')
[MTY_GetPathPrefix] Passed (!strcmp(cwd, prefix))
[MTY_GetFileName] Passed (!strcmp(origin_file, filename))
[MTY_CopyFile] Passed (MTY_FileExists(full_path_2))
[MTY_DeleteFile1] Passed (!MTY_FileExists(full_path))
MTY_DeleteFile: 'remove' failed with errno 2
[MTY_DeleteFile2] Passed (!MTY_DeleteFile(full_path))
[MTY_MoveFile1] Passed (MTY_MoveFile(full_path_2, full_path))
[MTY_MoveFile2] Passed (MTY_FileExists(full_path))
[MTY_MoveFile3] Passed (!MTY_FileExists(full_path_2))
MTY_MoveFile: 'rename' failed with errno 2
[MTY_MoveFile4] Passed (!MTY_MoveFile(full_path_2, full_path))
[MTY_MoveFile5] Passed (MTY_FileExists(full_path))
[MTY_MoveFile6] Passed (!MTY_FileExists(full_path_2))
[MTY_FileList] Passed (!failed)
[MTY_FreeFileList] Passed (!list)
[MTY_Mkdir] Passed (MTY_FileExists(full_path))
[MTY_Free] Passed (!failed)
[MTY_FreeAligned] Passed (!failed)
[MTY_Alloc] Passed (!failed)
[MTY_AllocAligned] Passed (!failed)
[MTY_Realloc] Passed (!failed)
[MTY_Dup] Passed (!failed)
[MTY_Strdup] Passed (dup_str[127] == '\0')
[MTY_Strcat] Passed (dup_str[127] == '\0')
[MTY_Strcasecmp] Passed (cmp == 0)
[MTY_SwapToBE16] Passed (u16_a != u16_b)
[MTY_SwapToBE32] Passed (u32_a != u32_b)
[MTY_SwapToBE64] Passed (u32_a != u32_b)
[MTY_SwapFromBE16] Passed (u16_a == u16_b)
[MTY_SwapFromBE32] Passed (u32_a == u32_b)
[MTY_SwapFromBE64] Passed (u32_a == u32_b)
[MTY_Swap16] Passed (u16_a != u16_b)
[MTY_Swap32] Passed (u32_a != u32_b)
[MTY_Swap64] Passed (u32_a != u32_b)
[MTY_MultiToWide] Passed (!failed)
[MTY_MultiToWideD] Passed (!failed)
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0:    42
[MTY_SprintfD] Passed cmp_val == 0:   -42
[MTY_SprintfD] Passed cmp_val == 0:              42
[MTY_SprintfD] Passed cmp_val == 0:             -42
[MTY_SprintfD] Passed cmp_val == 0:             -42
[MTY_SprintfD] Passed cmp_val == 0:         -42.987
[MTY_SprintfD] Passed cmp_val == 0:          42.987
[MTY_SprintfD] Passed cmp_val == 0: Hello testing
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: 4294966272
[MTY_SprintfD] Passed cmp_val == 0: 777
[MTY_SprintfD] Passed cmp_val == 0: 37777777001
[MTY_SprintfD] Passed cmp_val == 0: 1234abcd
[MTY_SprintfD] Passed cmp_val == 0: edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 1234ABCD
[MTY_SprintfD] Passed cmp_val == 0: EDCB5433
[MTY_SprintfD] Passed cmp_val == 0: x
[MTY_SprintfD] Passed cmp_val == 0: +42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0:   +42
[MTY_SprintfD] Passed cmp_val == 0:   -42
[MTY_SprintfD] Passed cmp_val == 0:             +42
[MTY_SprintfD] Passed cmp_val == 0:             -42
[MTY_SprintfD] Passed cmp_val == 0: Hello testing
[MTY_SprintfD] Passed cmp_val == 0: +1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: +1024
[MTY_SprintfD] Passed cmp_val == 0: -1024
[MTY_SprintfD] Passed cmp_val == 0: 1024
[MTY_SprintfD] Passed cmp_val == 0: 4294966272
[MTY_SprintfD] Passed cmp_val == 0: 777
[MTY_SprintfD] Passed cmp_val == 0: 37777777001
[MTY_SprintfD] Passed cmp_val == 0: 1234abcd
[MTY_SprintfD] Passed cmp_val == 0: edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 1234ABCD
[MTY_SprintfD] Passed cmp_val == 0: EDCB5433
[MTY_SprintfD] Passed cmp_val == 0: x
[MTY_SprintfD] Passed cmp_val == 0: +
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 00042
[MTY_SprintfD] Passed cmp_val == 0: -0042
[MTY_SprintfD] Passed cmp_val == 0: 000000000000042
[MTY_SprintfD] Passed cmp_val == 0: -00000000000042
[MTY_SprintfD] Passed cmp_val == 0: 000000000042.12
[MTY_SprintfD] Passed cmp_val == 0: 00000000042.988
[MTY_SprintfD] Passed cmp_val == 0: -00000042.98760
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42   
[MTY_SprintfD] Passed cmp_val == 0: -42  
[MTY_SprintfD] Passed cmp_val == 0: 42             
[MTY_SprintfD] Passed cmp_val == 0: -42            
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42   
[MTY_SprintfD] Passed cmp_val == 0: -42  
[MTY_SprintfD] Passed cmp_val == 0: 42             
[MTY_SprintfD] Passed cmp_val == 0: -42            
[MTY_SprintfD] Passed cmp_val == 0: 42
[MTY_SprintfD] Passed cmp_val == 0: -42
[MTY_SprintfD] Passed cmp_val == 0: 42   
[MTY_SprintfD] Passed cmp_val == 0: -42  
[MTY_SprintfD] Passed cmp_val == 0: 42             
[MTY_SprintfD] Passed cmp_val == 0: -42            
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: -0000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: -0000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000001024
[MTY_SprintfD] Passed cmp_val == 0: 00000000004294966272
[MTY_SprintfD] Passed cmp_val == 0: 00000000000000000777
[MTY_SprintfD] Passed cmp_val == 0: 00000000037777777001
[MTY_SprintfD] Passed cmp_val == 0: 0x00000000001234abcd
[MTY_SprintfD] Passed cmp_val == 0: 0x0000000000edcb5433
[MTY_SprintfD] Passed cmp_val == 0: 0X00000000001234ABCD
[MTY_SprintfD] Passed cmp_val == 0: 0X0000000000EDCB5433
[MTY_LogFunc(Short)] Passed msg != ((void *)0) && strlen(msg)
[MTY_LogFunc(Long)] Passed msg != ((void *)0) && strlen(msg)
[MTY_GetLog] Passed (last_log != ((void *)0) && strlen(last_log))
[MTY_DisableLog(off)] Passed msg != ((void *)0) && strlen(msg)
[CRC32 1] Passed crc == 0xcbf43926: "123456789"
[CRC32 2] Passed crc == 0x414FA339: "The quick brown fox jumps over the lazy dog"
[CRC32 3] Passed crc == 0x00000000: ""
[CRC32 1] Passed crc == 0x35cdbb82: "123456789"
[CRC32 2] Passed crc == 0x34cc38de: "The quick brown fox jumps over the lazy dog"
[CRC32 3] Passed crc == 0x00001505: ""
[SHA1("abc")] Passed strcmp_v == 0: "a9993e364706816aba3e25717850c26c9cd0d89d"
[SHA1("")] Passed strcmp_v == 0: "da39a3ee5e6b4b0d3255bfef95601890afd80709"
[SHA1("abcdbcde...")] Passed strcmp_v == 0: "84983e441c3bd26ebaae4aa1f95129e5e54670f1"
[SHA1("abcdefgh...")] Passed strcmp_v == 0: "a49b2446a02c645bf419f995b67091253a04a259"
[SHA1("aaaaaaaa...")] Passed strcmp_v == 0: "34aa973cd4c4daa4f61eeb2bdbad27316534016f"
[SHA256("abc")] Passed strcmp_v == 0: "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad"
[SHA256("")] Passed strcmp_v == 0: "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
[SHA256("abcdbc...")] Passed strcmp_v == 0: "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1"
[SHA256("abcdef...")] Passed strcmp_v == 0: "cf5b16a778af8380036ce59e7b0492370b249b11e8f07a51afac45037afee9d1"
[SHA256("aaaaaa...")] Passed strcmp_v == 0: "cdc76e5c9914fb9281a1c7e284d73e67f1809a48a497200e046d39ccc7112cd0"
[SHA256("48692054686] Passed strcmp_v == 0: "b0344c61d8db38535ca8afceaf0bf12b881dc200c9833da726e9376c2e32cff7"
[SHA256("77686174206] Passed strcmp_v == 0: "5bdcc146bf60754e6a042426089575c75a003f089d2739839dec58b964ec3843"
[SHA256("ddddddddddd] Passed strcmp_v == 0: "773ea91e36800e46854db8ebd09181a72959098b3ef8c122d9635514ced565fe"
[SHA256("cdcdcdcdcdc] Passed strcmp_v == 0: "82558a389a443c0ea4cc819899f2083a85f0faa3e578f8077a2e3ff46729665b"
[SHA256("54657374205] Passed strcmp_v == 0: "60e431591ee0b67f0d8a26aacbf5b77f8e0bc6213728c5140546040f0ee37f54"
[SHA256("54686973206] Passed strcmp_v == 0: "9b09ffa71b942fcb27635fbcd5b0e944bfdc63644f0713938a7f51535c3a35e2"
[Dist Small] Passed ds >= 0.0035 && ds <= 0.0045: 0.0037
[Dist Large] Passed dl >= 0.0035 && dl <= 0.0045: 0.0041
[Dist Small] Passed ds >= 0.0035 && ds <= 0.0045: 0.0037
[Dist Large] Passed dl >= 0.0035 && dl <= 0.0045: 0.0041
[MTY_AESGCMCreate] Passed (aes1 != ((void *)0))
[MTY_AESGCMDecrypt] Passed (ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDecrypt] Passed (!ok)
[MTY_AESGCMDecrypt] Passed (ok)
[MTY_AESGCMCreate] Passed (aes1 != ((void *)0))
MTY_AESGCMDecrypt: 'EVP_DecryptFinal_ex' failed with error 0
[MTY_AESGCMDestroy] Passed (aes1 == ((void *)0))
[MTY_AESGCMDecrypt] Passed (cmp_decr == 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_1 != 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_2 != 0)
[MTY_AESGCMEncrypt] Passed (cmp_encr_3 != 0)
[MTY_CondCreate] Passed (data.cond != ((void *)0))
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_CondDestroy] Passed (data.cond == ((void *)0))
[MTY_MutexCreate] Passed (data.mutex != ((void *)0))
[MTY_Mutex counter] Passed (data.counter == 0)
[MTY_Mutex counter] Passed (data.counter == 100)
[MTY_MutexTryLock] Passed (MTY_MutexTryLock(data.mutex))
[MTY_MutexTryLock] Passed (MTY_MutexTryLock(data.mutex))
[MTY_MutexDestroy] Passed (data.mutex == ((void *)0))
[MTY_ThreadCreate] Passed (t_test != ((void *)0))
[MTY_Thread executed] Passed (data.executed)
[MTY_ThreadDestroy] Passed (t_test == ((void *)0))
[MTY_Thread executed] Passed (!data.executed)
[MTY_Thread executed] Passed (data.executed)
[MTY_ThreadPoolCreate] Passed (data.pool != ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32) == 100)
[MTY_ThreadPoolDestroy] Passed (data.pool == ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32_detach) == 100)
[MTY_RWLockCreate] Passed (data.rw_lock != ((void *)0))
[MTY_RWLock write counter] Passed (data.counter == 0)
[MTY_RWLock write counter] Passed (data.counter == 0)
[MTY_RWLock write counter] Passed (data.counter == 100)
[MTY_RWLock read counter] Passed data.counter == 0: 0
[MTY_RWLock read counter] Passed data.counter == 0: 0
[MTY_RWLock counter] Passed (data.counter == 100)
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWTryLockReader] Passed (MTY_RWTryLockReader(data.rw_lock))
[MTY_RWLockDestroy] Passed (data.rw_lock == ((void *)0))
[MTY_WaitableCreate] Passed (data.wait != ((void *)0))
[MTY_Atomic32Get] Passed (MTY_Atomic32Get(&data.atomic_32) == 100)
[MTY_WaitableDestroy] Passed (data.wait == ((void *)0))
[MTY_WebSocketConnect] Failed (ws != ((void *)0))
make: *** [GNUmakefile:37: test] Error 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.