Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 4972 → Rev 4973

/programs/develop/libraries/menuetlibc/src/libc/compat/signal/siglist.c
0,0 → 1,97
/* Copyright (C) 1998 DJ Delorie, see COPYING.DJ for details */
/* Copyright (C) 1997 DJ Delorie, see COPYING.DJ for details */
 
#include <signal.h>
#include <string.h>
#include <stdlib.h>
 
char *sys_siglist[NSIG + 1]; /* initially all-zero */
 
static const char *known_signal[] = {
"Abort termination",
"Floating-point exception",
"Illegal instruction",
"Segmentation violation",
"Software termination signal",
"Alarm clock",
"Hangup",
"Interrupt",
"Kill",
"Write on pipe with no one to read it",
"Quit",
"User-defined signal 1",
"User-defined signal 2",
"Floating-point co-processor not present",
"Debugger/Breakpoint instruction",
"Timer tick signal",
"Profiler signal"
};
 
static char unknown_signal[] = "Unknown signal";
 
static void
put_hex_digits (char *str, int num, size_t idx)
{
static char xdigits[] = "0123456789ABCDEF";
 
str[idx] = xdigits[num / 16];
str[idx + 1] = xdigits[num & 15];
}
 
static char *
xstrdup (const char *src)
{
if (src)
{
size_t src_size = strlen (src) + 1;
char *new = (char *)malloc (src_size);
 
if (new)
{
memcpy (new, src, src_size);
return new;
}
}
 
return NULL;
}
 
static int signum;
 
static void
fill_dull_names (const char *template, size_t tpl_size, int count)
{
int i;
 
for (i = 0; i < count; i++)
{
char *signame = (char *)malloc (tpl_size);
 
memcpy (signame, template, tpl_size);
put_hex_digits (signame, i, tpl_size - 3);
sys_siglist[signum++] = signame;
}
}
 
static void __attribute__((constructor))
init_sys_siglist (void)
{
static char int_name[] = "Interrupt XXh";
static size_t int_size = sizeof(int_name);
static char excpt_name[] = "Exception XXh";
static size_t excpt_size = sizeof(excpt_name);
int i;
 
signum = 0;
 
fill_dull_names (int_name, int_size, 256);
fill_dull_names (excpt_name, excpt_size, 32);
 
for (i = 0; i < 17; i++)
sys_siglist[signum++] = xstrdup (known_signal[i]);
 
for (i = 305; i < 320; i++)
sys_siglist[signum++] = xstrdup (unknown_signal);
 
sys_siglist[signum] = 0;
}