zsetup.c - libzahl - big integer library
 (HTM) git clone git://git.suckless.org/libzahl
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       zsetup.c (1437B)
       ---
            1 /* See LICENSE file for copyright and license details. */
            2 #include "internals.h"
            3 
            4 #define X(x, s)  z_t x;
            5 LIST_TEMPS
            6 #undef X
            7 #define X(i, x, f, v)  z_t x;
            8 LIST_CONSTS
            9 #undef X
           10 
           11 z_t libzahl_tmp_divmod_ds[BITS_PER_CHAR];
           12 jmp_buf libzahl_jmp_buf;
           13 int libzahl_set_up = 0;
           14 int libzahl_error;
           15 zahl_char_t **libzahl_pool[sizeof(size_t) * 8];
           16 size_t libzahl_pool_n[sizeof(size_t) * 8];
           17 size_t libzahl_pool_alloc[sizeof(size_t) * 8];
           18 struct zahl **libzahl_temp_stack;
           19 struct zahl **libzahl_temp_stack_head;
           20 struct zahl **libzahl_temp_stack_end;
           21 void *libzahl_temp_allocation = 0;
           22 
           23 #define X(i, x, f, v)  1 +
           24 static zahl_char_t constant_chars[LIST_CONSTS ZAHL_FLUFF];
           25 #undef X
           26 
           27 
           28 void
           29 zsetup(jmp_buf env)
           30 {
           31         size_t i;
           32         *libzahl_jmp_buf = *env;
           33 
           34         if (likely(!libzahl_set_up)) {
           35                 libzahl_set_up = 1;
           36 
           37                 memset(libzahl_pool, 0, sizeof(libzahl_pool));
           38                 memset(libzahl_pool_n, 0, sizeof(libzahl_pool_n));
           39                 memset(libzahl_pool_alloc, 0, sizeof(libzahl_pool_alloc));
           40 
           41 #define X(x, s)\
           42                 zinit(x); if (s) zsetu(x, 1);
           43                 LIST_TEMPS;
           44 #undef X
           45 #define X(i, x, f, v)\
           46                 (x)->alloced = 1, (x)->chars = constant_chars + (i), f(x, v);
           47                 LIST_CONSTS;
           48 #undef X
           49                 for (i = BITS_PER_CHAR; i--;)
           50                         zinit(libzahl_tmp_divmod_ds[i]);
           51 
           52                 libzahl_temp_stack = malloc(256 * sizeof(*libzahl_temp_stack));
           53                 if (check(!libzahl_temp_stack))
           54                         libzahl_memfailure();
           55                 libzahl_temp_stack_head = libzahl_temp_stack;
           56                 libzahl_temp_stack_end = libzahl_temp_stack + 256;
           57         }
           58 }