Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 11 additions & 12 deletions examples/example_tut01.c
Original file line number Diff line number Diff line change
@@ -1,38 +1,38 @@
/**
* \file: example_tut01.c
*/

#include <stdio.h>
#include <stdlib.h>

#include "c_traceback.h"

void alloc_memory(double **arr, const size_t n);

int main(void)
{
const size_t n = 1000000000000000; // Vector size
const size_t n = 1000000000000000; // Vector size
const double denominator = 123.0;

/* Allocate memory */
double *arr;
TRY_GOTO(alloc_memory(&arr, n), error_clean_up);

/* Initialize values */

/* Division */

/* Clean up */
free(arr);
return 0;

error_clean_up:
/* Error clean up */
free(arr);
ctb_dump_traceback();
return 1;
}

void alloc_memory(double **arr, const size_t n)
{
*arr = malloc(n * sizeof(double));
Expand All @@ -42,4 +42,3 @@ void alloc_memory(double **arr, const size_t n)
THROW(CTB_MEMORY_ERROR, "Failed to allocate memory for vector!");
}
}

24 changes: 12 additions & 12 deletions examples/example_tut02.c
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
/**
* \file: example_tut02.c
*/

#include <stdio.h>
#include <stdlib.h>

#include "c_traceback.h"

void alloc_memory(double **arr, const size_t n);
void initialize_vec(double *arr, const size_t n);

int main(void)
{
ctb_install_signal_handler();

const size_t n = 1000; // Vector size
const size_t n = 1000; // Vector size
const double denominator = 123.0;

/* Allocate memory */
double *arr;
TRY_GOTO(alloc_memory(&arr, n), error_clean_up);

/* Initialize values */
TRY_GOTO(initialize_vec(arr, 1000 * n), error_clean_up);

/* Division */

/* Clean up */
free(arr);
return 0;

error_clean_up:
/* Error clean up */
free(arr);
ctb_dump_traceback();
return 1;
}

void alloc_memory(double **arr, const size_t n)
{
*arr = malloc(n * sizeof(double));
Expand All @@ -46,7 +46,7 @@ void alloc_memory(double **arr, const size_t n)
THROW(CTB_MEMORY_ERROR, "Failed to allocate memory for vector!");
}
}

void initialize_vec(double *arr, const size_t n)
{
if (!arr)
Expand Down
31 changes: 13 additions & 18 deletions examples/example_tut03.c
Original file line number Diff line number Diff line change
@@ -1,42 +1,42 @@
/**
* \file: example_tut03.c
*/

#include <stdio.h>
#include <stdlib.h>

#include "c_traceback.h"

void alloc_memory(double **arr, const size_t n);
void initialize_vec(double *arr, const size_t n);

int main(void)
{
ctb_install_signal_handler();

const size_t n = 1000; // Vector size
const size_t n = 1000; // Vector size
const double denominator = 123.0;

/* Allocate memory */
double *arr;
TRY_GOTO(alloc_memory(&arr, n), error_clean_up);

/* Initialize values */
TRY_GOTO(initialize_vec(arr, 1000 * n), error_clean_up);

/* Division */

/* Clean up */
free(arr);
return 0;

error_clean_up:
/* Error clean up */
free(arr);
ctb_dump_traceback();
return 1;
}

void alloc_memory(double **arr, const size_t n)
{
*arr = malloc(n * sizeof(double));
Expand All @@ -46,7 +46,7 @@ void alloc_memory(double **arr, const size_t n)
THROW(CTB_MEMORY_ERROR, "Failed to allocate memory for vector!");
}
}

void initialize_vec(double *arr, const size_t n)
{
if (!arr)
Expand All @@ -55,10 +55,5 @@ void initialize_vec(double *arr, const size_t n)
THROW(CTB_NULL_POINTER_ERROR, "Received null pointer.");
}

TRACE_BLOCK(
for (int i = 0; i < n; i++)
{
arr[i] = i;
}
);
TRACE_BLOCK(for (int i = 0; i < n; i++) { arr[i] = i; });
}
32 changes: 13 additions & 19 deletions examples/example_tut04.c
Original file line number Diff line number Diff line change
@@ -1,45 +1,45 @@
/**
* \file: example_tut04.c
*/

#include <stdio.h>
#include <stdlib.h>

#include "c_traceback.h"

void alloc_memory(double **arr, const size_t n);
void initialize_vec(double *arr, const size_t n);
void divide_vec(double *arr, const size_t n, const double denominator);

int main(void)
{
ctb_clear_context();
ctb_install_signal_handler();

const size_t n = 1000; // Vector size
const size_t n = 1000; // Vector size
const double denominator = 0.0;

/* Allocate memory */
double *arr;
TRY_GOTO(alloc_memory(&arr, n), error_clean_up);

/* Initialize values */
TRY_GOTO(initialize_vec(arr, n), error_clean_up);

/* Division */
TRY_GOTO(divide_vec(arr, n, denominator), error_clean_up);

/* Clean up */
free(arr);
return 0;

error_clean_up:
/* Error clean up */
free(arr);
ctb_dump_traceback();
return 1;
}

void alloc_memory(double **arr, const size_t n)
{
*arr = malloc(n * sizeof(double));
Expand All @@ -49,7 +49,7 @@ void alloc_memory(double **arr, const size_t n)
THROW(CTB_MEMORY_ERROR, "Failed to allocate memory for vector!");
}
}

void initialize_vec(double *arr, const size_t n)
{
if (!arr)
Expand All @@ -58,12 +58,7 @@ void initialize_vec(double *arr, const size_t n)
THROW(CTB_NULL_POINTER_ERROR, "Received null pointer.");
}

TRACE_BLOCK(
for (int i = 0; i < n; i++)
{
arr[i] = i;
}
);
TRACE_BLOCK(for (int i = 0; i < n; i++) { arr[i] = i; });
}

void divide_vec(double *arr, const size_t n, const double denominator)
Expand All @@ -81,4 +76,3 @@ void divide_vec(double *arr, const size_t n, const double denominator)
arr[i] /= denominator;
}
}

6 changes: 3 additions & 3 deletions include/c_traceback.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
* (i.e. the title printed at the top of the traceback output
* before "(most recent call last)"). It will be highlighted in
* bold.
*
* You can change this value to customize the header, e.g.
*
* You can change this value to customize the header, e.g.
* "MyApp Traceback"
*
*
* If its value is NULL or an empty string, "Traceback" will be used.
*/
#define CTB_TRACEBACK_HEADER ""
Expand Down
4 changes: 3 additions & 1 deletion src/error.c
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,9 @@ void ctb_throw_error(
ctb_setup_error_snapshot_core(context, error_snapshot, error, file, line, func);
if (msg != NULL)
{
snprintf(error_snapshot->error_message, CTB_MAX_ERROR_MESSAGE_LENGTH, "%s", msg);
snprintf(
error_snapshot->error_message, CTB_MAX_ERROR_MESSAGE_LENGTH, "%s", msg
);
}
else
{
Expand Down
9 changes: 4 additions & 5 deletions src/internal/trace.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,17 +13,16 @@

#ifndef ctb_thread_local
#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 202311L
/* C23 made 'thread_local' a standard keyword; map to it. */
/* C23 */
#define ctb_thread_local thread_local
#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
/* C11 provides the _Thread_local storage-class specifier.
Map ctb_thread_local to _Thread_local for thread-local storage. */
/* C11 */
#define ctb_thread_local _Thread_local
#elif defined(__GNUC__) || defined(__clang__) || defined(__MINGW32__)
/* GCC, Clang, and MinGW use __thread for C99 */
/* GCC and Clang */
#define ctb_thread_local __thread
#elif defined(_MSC_VER)
/* MSVC (Visual Studio) uses __declspec(thread) */
/* MSVC */
#define ctb_thread_local __declspec(thread)
#else
#error "Cannot define thread_local for this compiler/standard."
Expand Down