X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fadd_tries.c;h=29a1a60045b537411ef6642d6b724a72e4eb8a7c;hp=f83249ccf01a7025fe5f8ccb45379c4d520c9a07;hb=690589d8f19e38925db061296d4f704e4a965bb2;hpb=46722468f47c2b77b3987729b4bcf2321cccfd01 diff --git a/ncurses/tinfo/add_tries.c b/ncurses/tinfo/add_tries.c index f83249cc..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.4 2000/12/10 02:55:07 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)) -NCURSES_EXPORT(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); @@ -66,17 +67,16 @@ _nc_add_to_try(struct tries **tree, const char *str, unsigned short code) 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); }