diff --git a/src/DynString.c b/src/DynString.c index 5fc8c30..8b36869 100644 --- a/src/DynString.c +++ b/src/DynString.c @@ -6,6 +6,19 @@ #include "DynString.h" #include "log.h" +static void DynString_reserve(DynString* dstr, const size_t new_capacity) { + if (dstr->capacity >= new_capacity) { + return; + } + + errno = 0; + dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity); + if (errno != 0) { + LOG_FATAL("Ran out of memory"); + } + dstr->capacity = new_capacity; +} + DynString DynString_alloc(const char* str, const size_t len) { DynString dstr = { .data = (char*) malloc(sizeof(char) * (len + 1)), @@ -94,19 +107,6 @@ bool DynString_equal_next_chars_c_str( return true; } -void DynString_reserve(DynString* dstr, const size_t new_capacity) { - if (dstr->capacity >= new_capacity) { - return; - } - - errno = 0; - dstr->data = (char*) realloc(dstr->data, sizeof(char) * new_capacity); - if (errno != 0) { - LOG_FATAL("Ran out of memory"); - } - dstr->capacity = new_capacity; -} - void DynString_concat_c_str( DynString* dstr, const char* str, diff --git a/src/main.c b/src/main.c index 9cc9407..5870ef8 100644 --- a/src/main.c +++ b/src/main.c @@ -1,3 +1,4 @@ +#include #ifdef _WIN32 #include @@ -238,6 +239,73 @@ void print_info(Display* display) { puts(""); } +void glx_print_client_info(Display* display) { + const char* glx_client_vendor_str = glXGetClientString(display, GLX_VENDOR); + printf("Client GLX_VENDOR: %s\n", glx_client_vendor_str); + const char* glx_client_version_str = glXGetClientString(display, GLX_VERSION); + printf("Client GLX_VERSION: %s\n", glx_client_version_str); + const char* glx_client_extensions_str = glXGetClientString(display, GLX_EXTENSIONS); + printf("Client GLX_EXTENSIONS: %s\n", glx_client_extensions_str); +} + +void glx_print_server_info(Display* display) { + const char* glx_server_vendor_str = glXQueryServerString(display, DefaultScreen(display), GLX_VENDOR); + printf("Server GLX_VENDOR: %s\n", glx_server_vendor_str); + const char* glx_server_version_str = glXQueryServerString(display, DefaultScreen(display), GLX_VERSION); + printf("Server GLX_VERSION: %s\n", glx_server_version_str); + const char* glx_server_extensions_str = glXQueryServerString(display, DefaultScreen(display), GLX_EXTENSIONS); + printf("Server GLX_EXTENSIONS: %s\n", glx_server_extensions_str); +} + +void print_glxfbconfig(Display* display, const GLXFBConfig* cfg) { + int value = 0; + +#define PRINT_GLXFBCONFIG_VALUE(attrib) \ + value = 0; \ + if (glXGetFBConfigAttrib(display, *cfg, attrib, &value) != Success) { \ + LOG_FATALF("Invalid attrib %s", #attrib); \ + } \ + printf(" %s: %d\n", #attrib, value) + + puts("{"); + PRINT_GLXFBCONFIG_VALUE(GLX_FBCONFIG_ID); + PRINT_GLXFBCONFIG_VALUE(GLX_BUFFER_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_LEVEL); + PRINT_GLXFBCONFIG_VALUE(GLX_DOUBLEBUFFER); + PRINT_GLXFBCONFIG_VALUE(GLX_STEREO); + PRINT_GLXFBCONFIG_VALUE(GLX_AUX_BUFFERS); + PRINT_GLXFBCONFIG_VALUE(GLX_RED_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_GREEN_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_BLUE_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_ALPHA_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_DEPTH_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_STENCIL_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_RED_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_GREEN_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_BLUE_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_ACCUM_ALPHA_SIZE); + PRINT_GLXFBCONFIG_VALUE(GLX_SAMPLE_BUFFERS); + PRINT_GLXFBCONFIG_VALUE(GLX_SAMPLES); + PRINT_GLXFBCONFIG_VALUE(GLX_RENDER_TYPE); + PRINT_GLXFBCONFIG_VALUE(GLX_DRAWABLE_TYPE); + PRINT_GLXFBCONFIG_VALUE(GLX_X_RENDERABLE); + PRINT_GLXFBCONFIG_VALUE(GLX_X_VISUAL_TYPE); + PRINT_GLXFBCONFIG_VALUE(GLX_CONFIG_CAVEAT); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_TYPE); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_INDEX_VALUE); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_RED_VALUE); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_GREEN_VALUE); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_BLUE_VALUE); + PRINT_GLXFBCONFIG_VALUE(GLX_TRANSPARENT_ALPHA_VALUE); + PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_WIDTH); + PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_HEIGHT); + PRINT_GLXFBCONFIG_VALUE(GLX_MAX_PBUFFER_PIXELS); + PRINT_GLXFBCONFIG_VALUE(GLX_VISUAL_ID); + puts("}"); + +#undef PRINT_GLXFBCONFIG_VALUE +} + int main() { Display* display = XOpenDisplay(NULL); if (display == NULL) { @@ -276,7 +344,6 @@ int main() { printf(" %s\n", DynString_c_str(glx_extensions + i)); } - // XVisualInfo visual_info = { 0 }; // Status xstatus = XMatchVisualInfo(display, DefaultScreen(display), 32, TrueColor, &visual_info); // if (xstatus == 0) { diff --git a/tests/main.c b/tests/main.c index 8e75836..31cc788 100644 --- a/tests/main.c +++ b/tests/main.c @@ -11,7 +11,7 @@ void test_DynString_alloc(void** state) { assert_memory_equal(dstr.data, c_str, c_str_len + 1); assert_true(dstr.len == c_str_len); - assert_true(dstr.capacity == c_str_len); + assert_true(dstr.capacity == c_str_len + 1); free(dstr.data); } @@ -114,6 +114,24 @@ void test_DynString_split(void** state) { assert_true(arr_len == 2); assert_string_equal(DynString_c_str(arr), "Hello"); assert_string_equal(DynString_c_str(arr + 1), "World"); + DynString_free(&dstr); + for (size_t i = 0; i < arr_len; i++) { + DynString_free(arr + i); + } + arr = NULL; + + dstr = DynString_alloc(" Hello World", strlen(" Hello World")); + arr_len = 0; + arr = DynString_split(&dstr, " ", &arr_len); + assert_true(arr_len == 3); + assert_string_equal(DynString_c_str(arr), ""); + assert_string_equal(DynString_c_str(arr + 1), "Hello"); + assert_string_equal(DynString_c_str(arr + 2), "World"); + DynString_free(&dstr); + for (size_t i = 0; i < arr_len; i++) { + DynString_free(arr + i); + } + arr = NULL; } int main() {