mirror of
https://github.com/glfw/glfw.git
synced 2024-11-26 03:52:01 +00:00
Removed glfwGetError and glfwErrorString.
The cached error code cannot be made per-thread unless it required glfwInit (due to lack of __thread on OS X), which would be confusing and partially defeats the purpose of it. Beginners would use the generic error string facility instead of the error callback and then be confused by its nondescript messages. Storing the provided error code from within the error callback, whether globally or per-thread, requires just a few lines of code and hands control to the user without compromising thread safety.
This commit is contained in:
parent
9af61d06cf
commit
9cc8fc0d0a
@ -572,17 +572,13 @@ int main( void )
|
|||||||
|
|
||||||
/* Init GLFW */
|
/* Init GLFW */
|
||||||
if( !glfwInit() )
|
if( !glfwInit() )
|
||||||
{
|
|
||||||
fprintf( stderr, "Failed to initialize GLFW\n" );
|
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
|
||||||
|
|
||||||
glfwWindowHint(GLFW_DEPTH_BITS, 16);
|
glfwWindowHint(GLFW_DEPTH_BITS, 16);
|
||||||
|
|
||||||
window = glfwCreateWindow( 400, 400, GLFW_WINDOWED, "Boing (classic Amiga demo)", NULL );
|
window = glfwCreateWindow( 400, 400, GLFW_WINDOWED, "Boing (classic Amiga demo)", NULL );
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
fprintf( stderr, "Failed to open GLFW window\n" );
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit( EXIT_FAILURE );
|
exit( EXIT_FAILURE );
|
||||||
}
|
}
|
||||||
|
@ -10,24 +10,26 @@
|
|||||||
#define GLFW_INCLUDE_GLU
|
#define GLFW_INCLUDE_GLU
|
||||||
#include <GL/glfw3.h>
|
#include <GL/glfw3.h>
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int width, height, x;
|
int width, height, x;
|
||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
// Initialise GLFW
|
// Initialise GLFW
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW\n");
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
// Open a window and create its OpenGL context
|
// Open a window and create its OpenGL context
|
||||||
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Spinning Triangle", NULL);
|
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Spinning Triangle", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window\n");
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -257,6 +257,16 @@ void calc_grid(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//========================================================================
|
||||||
|
// Print errors
|
||||||
|
//========================================================================
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// Handle key strokes
|
// Handle key strokes
|
||||||
//========================================================================
|
//========================================================================
|
||||||
@ -393,16 +403,15 @@ int main(int argc, char* argv[])
|
|||||||
double t, dt_total, t_old;
|
double t, dt_total, t_old;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "GLFW initialization failed\n");
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Wave Simulation", NULL);
|
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Wave Simulation", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Could not open window\n");
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -951,25 +951,6 @@ GLFWAPI void glfwGetVersion(int* major, int* minor, int* rev);
|
|||||||
*/
|
*/
|
||||||
GLFWAPI const char* glfwGetVersionString(void);
|
GLFWAPI const char* glfwGetVersionString(void);
|
||||||
|
|
||||||
/*! @brief Retrieves the latest error.
|
|
||||||
* @return The latest @link errors error code @endlink.
|
|
||||||
* @ingroup error
|
|
||||||
*
|
|
||||||
* @remarks This function may be called before @ref glfwInit.
|
|
||||||
*/
|
|
||||||
GLFWAPI int glfwGetError(void);
|
|
||||||
|
|
||||||
/*! @brief Retrieves a generic, human readable description of the specified error.
|
|
||||||
* @param[in] error The @link errors error code @endlink to be described.
|
|
||||||
* @return A UTF-8 encoded string describing the error.
|
|
||||||
* @ingroup error
|
|
||||||
*
|
|
||||||
* @remarks This function may be called before @ref glfwInit.
|
|
||||||
*
|
|
||||||
* @remarks This function may be called from secondary threads.
|
|
||||||
*/
|
|
||||||
GLFWAPI const char* glfwErrorString(int error);
|
|
||||||
|
|
||||||
/*! @brief Sets the error callback.
|
/*! @brief Sets the error callback.
|
||||||
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
|
* @param[in] cbfun The new callback, or @c NULL to remove the currently set
|
||||||
* callback.
|
* callback.
|
||||||
|
@ -270,8 +270,7 @@ version of GLFW.</p>
|
|||||||
<li>Added <code>GLFWwindow</code> window handle type and updated window-related functions and callbacks to take a window handle</li>
|
<li>Added <code>GLFWwindow</code> window handle type and updated window-related functions and callbacks to take a window handle</li>
|
||||||
<li>Added <code>glfwDefaultWindowHints</code> function for resetting all window hints to their default values</li>
|
<li>Added <code>glfwDefaultWindowHints</code> function for resetting all window hints to their default values</li>
|
||||||
<li>Added <code>glfwMakeContextCurrent</code> function for making the context of the specified window current</li>
|
<li>Added <code>glfwMakeContextCurrent</code> function for making the context of the specified window current</li>
|
||||||
<li>Added <code>glfwGetError</code> and <code>glfwErrorString</code> error reporting functions and a number of error tokens</li>
|
<li>Added <code>glfwSetErrorCallback</code> function and <code>GLFWerrorfun</code> type for receiving error descriptions</li>
|
||||||
<li>Added <code>glfwSetErrorCallback</code> function and <code>GLFWerrorfun</code> type for receiving more specific and/or nested errors</li>
|
|
||||||
<li>Added <code>glfwSetWindowUserPointer</code> and <code>glfwGetWindowUserPointer</code> functions for per-window user pointers</li>
|
<li>Added <code>glfwSetWindowUserPointer</code> and <code>glfwGetWindowUserPointer</code> functions for per-window user pointers</li>
|
||||||
<li>Added <code>glfwGetVersionString</code> function for determining which code paths were enabled at compile time</li>
|
<li>Added <code>glfwGetVersionString</code> function for determining which code paths were enabled at compile time</li>
|
||||||
<li>Added <code>glfwSetWindowPosCallback</code> function and <code>GLFWwindowposfun</code> type for reciving window position events</li>
|
<li>Added <code>glfwSetWindowPosCallback</code> function and <code>GLFWwindowposfun</code> type for reciving window position events</li>
|
||||||
|
95
src/init.c
95
src/init.c
@ -50,15 +50,6 @@ GLboolean _glfwInitialized = GL_FALSE;
|
|||||||
_GLFWlibrary _glfwLibrary;
|
_GLFWlibrary _glfwLibrary;
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
// The current GLFW error code
|
|
||||||
// This is outside of _glfwLibrary so it can be initialized and usable
|
|
||||||
// before glfwInit is called, which lets that function report errors
|
|
||||||
// TODO: Make this thread-local
|
|
||||||
//------------------------------------------------------------------------
|
|
||||||
static int _glfwError = GLFW_NO_ERROR;
|
|
||||||
|
|
||||||
|
|
||||||
//------------------------------------------------------------------------
|
//------------------------------------------------------------------------
|
||||||
// The current error callback
|
// The current error callback
|
||||||
// This is outside of _glfwLibrary so it can be initialized and usable
|
// This is outside of _glfwLibrary so it can be initialized and usable
|
||||||
@ -67,6 +58,40 @@ static int _glfwError = GLFW_NO_ERROR;
|
|||||||
static GLFWerrorfun _glfwErrorCallback = NULL;
|
static GLFWerrorfun _glfwErrorCallback = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
//========================================================================
|
||||||
|
// Returns a generic string representation of the specified error
|
||||||
|
//========================================================================
|
||||||
|
|
||||||
|
static const char* getErrorString(int error)
|
||||||
|
{
|
||||||
|
switch (error)
|
||||||
|
{
|
||||||
|
case GLFW_NO_ERROR:
|
||||||
|
return "No error";
|
||||||
|
case GLFW_NOT_INITIALIZED:
|
||||||
|
return "The GLFW library is not initialized";
|
||||||
|
case GLFW_NO_CURRENT_CONTEXT:
|
||||||
|
return "There is no current context";
|
||||||
|
case GLFW_INVALID_ENUM:
|
||||||
|
return "Invalid argument for enum parameter";
|
||||||
|
case GLFW_INVALID_VALUE:
|
||||||
|
return "Invalid value for parameter";
|
||||||
|
case GLFW_OUT_OF_MEMORY:
|
||||||
|
return "Out of memory";
|
||||||
|
case GLFW_API_UNAVAILABLE:
|
||||||
|
return "The requested client API is unavailable";
|
||||||
|
case GLFW_VERSION_UNAVAILABLE:
|
||||||
|
return "The requested client API version is unavailable";
|
||||||
|
case GLFW_PLATFORM_ERROR:
|
||||||
|
return "A platform-specific error occurred";
|
||||||
|
case GLFW_FORMAT_UNAVAILABLE:
|
||||||
|
return "The requested format is unavailable";
|
||||||
|
}
|
||||||
|
|
||||||
|
return "ERROR: UNKNOWN ERROR TOKEN PASSED TO glfwErrorString";
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
////// GLFW internal API //////
|
////// GLFW internal API //////
|
||||||
//////////////////////////////////////////////////////////////////////////
|
//////////////////////////////////////////////////////////////////////////
|
||||||
@ -97,12 +122,10 @@ void _glfwSetError(int error, const char* format, ...)
|
|||||||
description = buffer;
|
description = buffer;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
description = glfwErrorString(error);
|
description = getErrorString(error);
|
||||||
|
|
||||||
_glfwErrorCallback(error, description);
|
_glfwErrorCallback(error, description);
|
||||||
}
|
}
|
||||||
else
|
|
||||||
_glfwError = error;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -187,54 +210,6 @@ GLFWAPI const char* glfwGetVersionString(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
//========================================================================
|
|
||||||
// Returns the current error value
|
|
||||||
// This function may be called without GLFW having been initialized
|
|
||||||
//========================================================================
|
|
||||||
|
|
||||||
GLFWAPI int glfwGetError(void)
|
|
||||||
{
|
|
||||||
int error = _glfwError;
|
|
||||||
_glfwError = GLFW_NO_ERROR;
|
|
||||||
return error;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//========================================================================
|
|
||||||
// Returns a string representation of the specified error value
|
|
||||||
// This function may be called without GLFW having been initialized
|
|
||||||
//========================================================================
|
|
||||||
|
|
||||||
GLFWAPI const char* glfwErrorString(int error)
|
|
||||||
{
|
|
||||||
switch (error)
|
|
||||||
{
|
|
||||||
case GLFW_NO_ERROR:
|
|
||||||
return "No error";
|
|
||||||
case GLFW_NOT_INITIALIZED:
|
|
||||||
return "The GLFW library is not initialized";
|
|
||||||
case GLFW_NO_CURRENT_CONTEXT:
|
|
||||||
return "There is no current context";
|
|
||||||
case GLFW_INVALID_ENUM:
|
|
||||||
return "Invalid argument for enum parameter";
|
|
||||||
case GLFW_INVALID_VALUE:
|
|
||||||
return "Invalid value for parameter";
|
|
||||||
case GLFW_OUT_OF_MEMORY:
|
|
||||||
return "Out of memory";
|
|
||||||
case GLFW_API_UNAVAILABLE:
|
|
||||||
return "The requested client API is unavailable";
|
|
||||||
case GLFW_VERSION_UNAVAILABLE:
|
|
||||||
return "The requested client API version is unavailable";
|
|
||||||
case GLFW_PLATFORM_ERROR:
|
|
||||||
return "A platform-specific error occurred";
|
|
||||||
case GLFW_FORMAT_UNAVAILABLE:
|
|
||||||
return "The requested format is unavailable";
|
|
||||||
}
|
|
||||||
|
|
||||||
return "ERROR: UNKNOWN ERROR TOKEN PASSED TO glfwErrorString";
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//========================================================================
|
//========================================================================
|
||||||
// Sets the callback function for GLFW errors
|
// Sets the callback function for GLFW errors
|
||||||
// This function may be called without GLFW having been initialized
|
// This function may be called without GLFW having been initialized
|
||||||
|
@ -51,6 +51,11 @@ static void set_swap_interval(GLFWwindow window, int interval)
|
|||||||
glfwSetWindowTitle(window, title);
|
glfwSetWindowTitle(window, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
window_width = width;
|
window_width = width;
|
||||||
@ -80,18 +85,15 @@ int main(void)
|
|||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(window_width, window_height, GLFW_WINDOWED, "", NULL);
|
window = glfwCreateWindow(window_width, window_height, GLFW_WINDOWED, "", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,11 @@ static GLboolean control_is_down(GLFWwindow window)
|
|||||||
glfwGetKey(window, GLFW_KEY_RIGHT_CONTROL);
|
glfwGetKey(window, GLFW_KEY_RIGHT_CONTROL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static int window_close_callback(GLFWwindow window)
|
static int window_close_callback(GLFWwindow window)
|
||||||
{
|
{
|
||||||
closed = GL_TRUE;
|
closed = GL_TRUE;
|
||||||
@ -93,11 +98,6 @@ static void window_size_callback(GLFWwindow window, int width, int height)
|
|||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void error_callback(int error, const char* description)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Error in %s\n", description);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char** argv)
|
int main(int argc, char** argv)
|
||||||
{
|
{
|
||||||
int ch;
|
int ch;
|
||||||
|
@ -72,16 +72,20 @@ static ParamGLFW glfw_params[] =
|
|||||||
{ 0, NULL }
|
{ 0, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int i, width, height;
|
int i, width, height;
|
||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
|
glfwWindowHint(GLFW_VISIBLE, GL_FALSE);
|
||||||
|
|
||||||
@ -89,8 +93,6 @@ int main(void)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -218,6 +218,11 @@ static const char* get_character_string(int character)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_pos_callback(GLFWwindow window, int x, int y)
|
static void window_pos_callback(GLFWwindow window, int x, int y)
|
||||||
{
|
{
|
||||||
printf("%08x at %0.3f: Window position: %i %i\n",
|
printf("%08x at %0.3f: Window position: %i %i\n",
|
||||||
@ -344,11 +349,10 @@ int main(void)
|
|||||||
|
|
||||||
setlocale(LC_ALL, "");
|
setlocale(LC_ALL, "");
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
printf("Library initialized\n");
|
printf("Library initialized\n");
|
||||||
|
|
||||||
@ -356,8 +360,6 @@ int main(void)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
14
tests/fsaa.c
14
tests/fsaa.c
@ -38,6 +38,11 @@
|
|||||||
|
|
||||||
#include "getopt.h"
|
#include "getopt.h"
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -82,11 +87,10 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
if (samples)
|
if (samples)
|
||||||
printf("Requesting FSAA with %i samples\n", samples);
|
printf("Requesting FSAA with %i samples\n", samples);
|
||||||
@ -99,8 +103,6 @@ int main(int argc, char** argv)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,8 +115,6 @@ int main(int argc, char** argv)
|
|||||||
if (!glfwExtensionSupported("GL_ARB_multisample"))
|
if (!glfwExtensionSupported("GL_ARB_multisample"))
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Context reports GL_ARB_multisample is not supported\n");
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +35,11 @@
|
|||||||
|
|
||||||
static GLboolean running = GL_TRUE;
|
static GLboolean running = GL_TRUE;
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_focus_callback(GLFWwindow window, int focused)
|
static void window_focus_callback(GLFWwindow window, int focused)
|
||||||
{
|
{
|
||||||
printf("%0.3f: Window %s\n",
|
printf("%0.3f: Window %s\n",
|
||||||
@ -76,18 +81,15 @@ int main(void)
|
|||||||
{
|
{
|
||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(640, 480, GLFW_FULLSCREEN, "Fullscreen focus", NULL);
|
window = glfwCreateWindow(640, 480, GLFW_FULLSCREEN, "Fullscreen focus", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +52,11 @@ static void set_gamma(float value)
|
|||||||
glfwSetGamma(gamma_value);
|
glfwSetGamma(gamma_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static int window_close_callback(GLFWwindow window)
|
static int window_close_callback(GLFWwindow window)
|
||||||
{
|
{
|
||||||
closed = GL_TRUE;
|
closed = GL_TRUE;
|
||||||
@ -118,11 +123,10 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == GLFW_FULLSCREEN)
|
if (mode == GLFW_FULLSCREEN)
|
||||||
{
|
{
|
||||||
@ -141,8 +145,6 @@ int main(int argc, char** argv)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -257,10 +257,7 @@ int main(int argc, char** argv)
|
|||||||
glfwSetErrorCallback(error_callback);
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
if (major != 1 || minor != 0)
|
if (major != 1 || minor != 0)
|
||||||
{
|
{
|
||||||
|
@ -42,6 +42,11 @@ static void usage(void)
|
|||||||
printf("Usage: iconify [-h] [-f]\n");
|
printf("Usage: iconify [-h] [-f]\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static int window_close_callback(GLFWwindow window)
|
static int window_close_callback(GLFWwindow window)
|
||||||
{
|
{
|
||||||
closed = GL_TRUE;
|
closed = GL_TRUE;
|
||||||
@ -113,11 +118,10 @@ int main(int argc, char** argv)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == GLFW_FULLSCREEN)
|
if (mode == GLFW_FULLSCREEN)
|
||||||
{
|
{
|
||||||
@ -136,8 +140,6 @@ int main(int argc, char** argv)
|
|||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -47,6 +47,11 @@ typedef struct Joystick
|
|||||||
static Joystick joysticks[GLFW_JOYSTICK_LAST - GLFW_JOYSTICK_1 + 1];
|
static Joystick joysticks[GLFW_JOYSTICK_LAST - GLFW_JOYSTICK_1 + 1];
|
||||||
static int joystick_count = 0;
|
static int joystick_count = 0;
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -185,18 +190,15 @@ int main(void)
|
|||||||
|
|
||||||
memset(joysticks, 0, sizeof(joysticks));
|
memset(joysticks, 0, sizeof(joysticks));
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Joystick Test", NULL);
|
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "Joystick Test", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
|
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,6 +56,11 @@ static void toggle_cursor(GLFWwindow window)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void cursor_position_callback(GLFWwindow window, int x, int y)
|
static void cursor_position_callback(GLFWwindow window, int x, int y)
|
||||||
{
|
{
|
||||||
printf("Cursor moved to: %i %i (%i %i)\n", x, y, x - cursor_x, y - cursor_y);
|
printf("Cursor moved to: %i %i (%i %i)\n", x, y, x - cursor_x, y - cursor_y);
|
||||||
@ -111,16 +116,13 @@ static GLboolean open_window(void)
|
|||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
if (!open_window())
|
if (!open_window())
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -139,8 +141,6 @@ int main(void)
|
|||||||
glfwDestroyWindow(window_handle);
|
glfwDestroyWindow(window_handle);
|
||||||
if (!open_window())
|
if (!open_window())
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -54,6 +54,11 @@ static const char* get_mode_name(int mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -85,19 +90,13 @@ static GLboolean open_window(int width, int height, int mode)
|
|||||||
double base;
|
double base;
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
base = glfwGetTime();
|
base = glfwGetTime();
|
||||||
|
|
||||||
window_handle = glfwCreateWindow(width, height, mode, "Window Re-opener", NULL);
|
window_handle = glfwCreateWindow(width, height, mode, "Window Re-opener", NULL);
|
||||||
if (!window_handle)
|
if (!window_handle)
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to open %s mode GLFW window: %s\n", get_mode_name(mode), glfwErrorString(glfwGetError()));
|
|
||||||
return GL_FALSE;
|
return GL_FALSE;
|
||||||
}
|
|
||||||
|
|
||||||
glfwMakeContextCurrent(window_handle);
|
glfwMakeContextCurrent(window_handle);
|
||||||
glfwSwapInterval(1);
|
glfwSwapInterval(1);
|
||||||
@ -129,6 +128,8 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
if (!open_window(640, 480, (count & 1) ? GLFW_FULLSCREEN : GLFW_WINDOWED))
|
if (!open_window(640, 480, (count & 1) ? GLFW_FULLSCREEN : GLFW_WINDOWED))
|
||||||
|
@ -39,6 +39,11 @@
|
|||||||
static GLFWwindow windows[2];
|
static GLFWwindow windows[2];
|
||||||
static GLboolean closed = GL_FALSE;
|
static GLboolean closed = GL_FALSE;
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void key_callback(GLFWwindow window, int key, int action)
|
static void key_callback(GLFWwindow window, int key, int action)
|
||||||
{
|
{
|
||||||
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
|
if (action == GLFW_PRESS && key == GLFW_KEY_ESCAPE)
|
||||||
@ -128,17 +133,14 @@ int main(int argc, char** argv)
|
|||||||
{
|
{
|
||||||
GLuint texture;
|
GLuint texture;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
windows[0] = open_window("First", NULL, 0, 0);
|
windows[0] = open_window("First", NULL, 0, 0);
|
||||||
if (!windows[0])
|
if (!windows[0])
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open first GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
@ -152,8 +154,6 @@ int main(int argc, char** argv)
|
|||||||
windows[1] = open_window("Second", windows[0], WIDTH + 50, 0);
|
windows[1] = open_window("Second", windows[0], WIDTH + 50, 0);
|
||||||
if (!windows[1])
|
if (!windows[1])
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open second GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -48,6 +48,11 @@ static void set_swap_interval(GLFWwindow window, int interval)
|
|||||||
glfwSetWindowTitle(window, title);
|
glfwSetWindowTitle(window, title);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -64,17 +69,14 @@ int main(void)
|
|||||||
float position;
|
float position;
|
||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "", NULL);
|
window = glfwCreateWindow(640, 480, GLFW_WINDOWED, "", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -47,6 +47,11 @@ typedef struct
|
|||||||
|
|
||||||
static volatile GLboolean running = GL_TRUE;
|
static volatile GLboolean running = GL_TRUE;
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static int thread_main(void* data)
|
static int thread_main(void* data)
|
||||||
{
|
{
|
||||||
const Thread* thread = (const Thread*) data;
|
const Thread* thread = (const Thread*) data;
|
||||||
@ -80,12 +85,10 @@ int main(void)
|
|||||||
};
|
};
|
||||||
const int count = sizeof(threads) / sizeof(Thread);
|
const int count = sizeof(threads) / sizeof(Thread);
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n",
|
|
||||||
glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
@ -97,8 +100,7 @@ int main(void)
|
|||||||
NULL);
|
NULL);
|
||||||
if (!threads[i].window)
|
if (!threads[i].window)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n",
|
glfwTerminate();
|
||||||
glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,6 +108,8 @@ int main(void)
|
|||||||
thrd_success)
|
thrd_success)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to create secondary thread\n");
|
fprintf(stderr, "Failed to create secondary thread\n");
|
||||||
|
|
||||||
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -32,6 +32,11 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
static void window_size_callback(GLFWwindow window, int width, int height)
|
static void window_size_callback(GLFWwindow window, int width, int height)
|
||||||
{
|
{
|
||||||
glViewport(0, 0, width, height);
|
glViewport(0, 0, width, height);
|
||||||
@ -41,17 +46,14 @@ int main(void)
|
|||||||
{
|
{
|
||||||
GLFWwindow window;
|
GLFWwindow window;
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
window = glfwCreateWindow(400, 400, GLFW_WINDOWED, "English 日本語 русский язык 官話", NULL);
|
window = glfwCreateWindow(400, 400, GLFW_WINDOWED, "English 日本語 русский язык 官話", NULL);
|
||||||
if (!window)
|
if (!window)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n", glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
@ -40,18 +40,21 @@ static const char* titles[] =
|
|||||||
"Quux"
|
"Quux"
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static void error_callback(int error, const char* description)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Error: %s\n", description);
|
||||||
|
}
|
||||||
|
|
||||||
int main(void)
|
int main(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
GLboolean running = GL_TRUE;
|
GLboolean running = GL_TRUE;
|
||||||
GLFWwindow windows[4];
|
GLFWwindow windows[4];
|
||||||
|
|
||||||
|
glfwSetErrorCallback(error_callback);
|
||||||
|
|
||||||
if (!glfwInit())
|
if (!glfwInit())
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to initialize GLFW: %s\n",
|
|
||||||
glfwErrorString(glfwGetError()));
|
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < 4; i++)
|
for (i = 0; i < 4; i++)
|
||||||
{
|
{
|
||||||
@ -60,9 +63,6 @@ int main(void)
|
|||||||
windows[i] = glfwCreateWindow(200, 200, GLFW_WINDOWED, titles[i], NULL);
|
windows[i] = glfwCreateWindow(200, 200, GLFW_WINDOWED, titles[i], NULL);
|
||||||
if (!windows[i])
|
if (!windows[i])
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Failed to open GLFW window: %s\n",
|
|
||||||
glfwErrorString(glfwGetError()));
|
|
||||||
|
|
||||||
glfwTerminate();
|
glfwTerminate();
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user