24 lines
485 B
C
24 lines
485 B
C
|
|
// SPDX-License-Identifier: LGPL-3.0-only
|
||
|
|
// SPDX-FileCopyrightText: Copyright (C) 2026 Catcrafts®
|
||
|
|
|
||
|
|
#include <setjmp.h>
|
||
|
|
#include <stdint.h>
|
||
|
|
|
||
|
|
static jmp_buf target;
|
||
|
|
|
||
|
|
static void JumpBack(int32_t value) {
|
||
|
|
longjmp(target, value);
|
||
|
|
}
|
||
|
|
|
||
|
|
// setjmp's value may only be compared or switched on, never stored.
|
||
|
|
int32_t JumpRoundTrip(void) {
|
||
|
|
switch (setjmp(target)) {
|
||
|
|
case 0:
|
||
|
|
JumpBack(7);
|
||
|
|
return 0;
|
||
|
|
case 7:
|
||
|
|
return 7;
|
||
|
|
default:
|
||
|
|
return -1;
|
||
|
|
}
|
||
|
|
}
|