X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fadd_tries.c;h=29a1a60045b537411ef6642d6b724a72e4eb8a7c;hp=601fb663b7b6f7a0d491dd334b7f775352c47061;hb=fe43d506ce08d1deef9e9e5a6d5fd4f9c9c32e1d;hpb=b1f61d9f3aa244512045a6b02e759825d7049d34 diff --git a/ncurses/tinfo/add_tries.c b/ncurses/tinfo/add_tries.c index 601fb663..29a1a600 100644 --- a/ncurses/tinfo/add_tries.c +++ b/ncurses/tinfo/add_tries.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998,2000 Free Software Foundation, Inc. * + * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -27,7 +27,7 @@ ****************************************************************************/ /**************************************************************************** - * Author: Thomas E. Dickey 1998 * + * Author: Thomas E. Dickey 1998-on * ****************************************************************************/ /* @@ -39,20 +39,21 @@ #include -MODULE_ID("$Id: add_tries.c,v 1.2 2000/03/18 22:23:56 tom Exp $") +MODULE_ID("$Id: add_tries.c,v 1.10 2010/12/19 01:31:14 tom Exp $") #define SET_TRY(dst,src) if ((dst->ch = *src++) == 128) dst->ch = '\0' #define CMP_TRY(a,b) ((a)? (a == b) : (b == 128)) -void -_nc_add_to_try(struct tries **tree, const char *str, unsigned short code) +NCURSES_EXPORT(int) +_nc_add_to_try(TRIES ** tree, const char *str, unsigned code) { - static bool out_of_memory = FALSE; - struct tries *ptr, *savedptr; + TRIES *ptr, *savedptr; unsigned const char *txt = (unsigned const char *) str; - if (txt == 0 || *txt == '\0' || out_of_memory || code == 0) - return; + T((T_CALLED("_nc_add_to_try(%p, %s, %u)"), + (void *) *tree, _nc_visbuf(str), code)); + if (txt == 0 || *txt == '\0' || code == 0) + returnCode(ERR); if ((*tree) != 0) { ptr = savedptr = (*tree); @@ -61,22 +62,21 @@ _nc_add_to_try(struct tries **tree, const char *str, unsigned short code) unsigned char cmp = *txt; while (!CMP_TRY(ptr->ch, cmp) - && ptr->sibling != 0) + && ptr->sibling != 0) ptr = ptr->sibling; if (CMP_TRY(ptr->ch, cmp)) { if (*(++txt) == '\0') { - ptr->value = code; - return; + ptr->value = (unsigned short) code; + returnCode(OK); } if (ptr->child != 0) ptr = ptr->child; else break; } else { - if ((ptr->sibling = typeCalloc(struct tries, 1)) == 0) { - out_of_memory = TRUE; - return; + if ((ptr->sibling = typeCalloc(TRIES, 1)) == 0) { + returnCode(ERR); } savedptr = ptr = ptr->sibling; @@ -87,11 +87,10 @@ _nc_add_to_try(struct tries **tree, const char *str, unsigned short code) } } /* end for (;;) */ } else { /* (*tree) == 0 :: First sequence to be added */ - savedptr = ptr = (*tree) = typeCalloc(struct tries, 1); + savedptr = ptr = (*tree) = typeCalloc(TRIES, 1); if (ptr == 0) { - out_of_memory = TRUE; - return; + returnCode(ERR); } SET_TRY(ptr, txt); @@ -101,25 +100,22 @@ _nc_add_to_try(struct tries **tree, const char *str, unsigned short code) /* at this point, we are adding to the try. ptr->child == 0 */ while (*txt) { - ptr->child = typeCalloc(struct tries, 1); + ptr->child = typeCalloc(TRIES, 1); ptr = ptr->child; if (ptr == 0) { - out_of_memory = TRUE; - while ((ptr = savedptr) != 0) { savedptr = ptr->child; free(ptr); } - - return; + returnCode(ERR); } SET_TRY(ptr, txt); ptr->value = 0; } - ptr->value = code; - return; + ptr->value = (unsigned short) code; + returnCode(OK); }