forked from KolibriOS/kolibrios
## New functions:
+ implement `_exit`/`_Exit`.
+ implement `atexit`.
+ implement `abort`.
`abort` write `Aborted pid: %d` to debug board
## Changes:
### call `exit` after main.
Just calling `exit`
### `exit` write exit code
If exit code isn't 0 `exit` will write exit code to debug board.
### use `con_exit(0)`
use
```c
con_exit(0)
```
instead of
```c
con_exit(status);
```
[from console.obj readme](310999dcc4/programs/develop/libraries/console_coff/console_en.txt (L15)).
I think the console window shouldn't be so dependent on the exit code. It's must only always close or always stay on screen
### `exit` writing exit code to debug board
Since the exit code is not used anywhere right now, I think it's better to just show it on the debug board.
for auto rebuild `crt0.o` need #339
from #311
---------
Co-authored-by: Burer <burer@kolibrios.org>
Reviewed-on: KolibriOS/kolibrios#340
Reviewed-by: Mikhail Frolov <mixa.frolov2003@gmail.com>
Reviewed-by: Burer <burer@kolibrios.org>
Co-authored-by: Egor00f <y.yarin@inbox.ru>
Co-committed-by: Egor00f <y.yarin@inbox.ru>
41 lines
668 B
C
41 lines
668 B
C
/*
|
|
* SPDX-License-Identifier: GPL-2.0-only
|
|
* Copyright (C) 2026 KolibriOS team
|
|
*/
|
|
|
|
#include <stdlib.h>
|
|
|
|
struct atexit_n {
|
|
struct atexit_n* last;
|
|
void (*func)(void);
|
|
};
|
|
|
|
static struct atexit_n* __last_atexit_node = NULL;
|
|
|
|
int atexit(void (*func)(void))
|
|
{
|
|
struct atexit_n* n = malloc(sizeof(struct atexit_n));
|
|
|
|
if (n == NULL) {
|
|
return 1;
|
|
}
|
|
|
|
n->last = __last_atexit_node;
|
|
n->func = func;
|
|
|
|
__last_atexit_node = n;
|
|
|
|
return 0;
|
|
}
|
|
|
|
void __run_atexit()
|
|
{
|
|
struct atexit_n* n = __last_atexit_node;
|
|
while (n != NULL) {
|
|
n->func();
|
|
struct atexit_n* to_free = n;
|
|
n = n->last;
|
|
free(to_free);
|
|
}
|
|
}
|