gs_list.c
上传用户:mei_mei897
上传日期:2007-01-05
资源大小:82k
文件大小:4k
源码类别:

手机短信编程

开发平台:

Unix_Linux

  1. /* -------------------------------------------------------------------- */
  2. /* SMS Client, send messages to mobile phones and pagers */
  3. /* */
  4. /* gs_list.c */
  5. /* */
  6. /*  Copyright (C) 1997,1998 Angelo Masci */
  7. /* */
  8. /*  This library is free software; you can redistribute it and/or */
  9. /*  modify it under the terms of the GNU Library General Public */
  10. /*  License as published by the Free Software Foundation; either */
  11. /*  version 2 of the License, or (at your option) any later version. */
  12. /* */
  13. /*  This library is distributed in the hope that it will be useful, */
  14. /*  but WITHOUT ANY WARRANTY; without even the implied warranty of */
  15. /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU */
  16. /*  Library General Public License for more details. */
  17. /* */
  18. /*  You should have received a copy of the GNU Library General Public */
  19. /*  License along with this library; if not, write to the Free */
  20. /*  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
  21. /* */
  22. /*  You can contact the author at this e-mail address: */
  23. /* */
  24. /*  angelo@styx.demon.co.uk */
  25. /* */
  26. /* -------------------------------------------------------------------- */
  27. /* $Id$
  28.    -------------------------------------------------------------------- */
  29. #include <stdio.h>
  30. #include <stdlib.h>
  31. #include <string.h>
  32. #include "common.h"
  33. #include "logfile.h"
  34. #include "gs_token.h"
  35. /* -------------------------------------------------------------------- */
  36. /* -------------------------------------------------------------------- */
  37. TOKEN_LIST *malloc_token_list_item(void)
  38. {
  39. TOKEN_LIST
  40. *list_item;
  41. TOKEN *token;
  42. list_item = (TOKEN_LIST *)malloc(sizeof(TOKEN_LIST));
  43. if (list_item == NULL)
  44. {
  45. lprintf(LOG_ERROR, "Allocating memoryn");
  46. exit(1);
  47. }
  48. token = (TOKEN *)malloc(sizeof(TOKEN));
  49. if (token == NULL)
  50. {
  51. free(list_item);
  52. lprintf(LOG_ERROR, "Allocating memoryn");
  53. exit(1);
  54. }
  55. list_item->token = token;
  56. list_item->next  = NULL;
  57. return list_item;
  58. }
  59. /* -------------------------------------------------------------------- */
  60. /* -------------------------------------------------------------------- */
  61. void update_token(TOKEN *token, char *str, int type, int ptr_type, void *ptr)
  62. {
  63. token->str      = strdup(str);
  64. token->type     = type;
  65. token->ptr_type = ptr_type;
  66. token->ptr      = ptr;
  67. lprintf(LOG_VERYVERBOSE, "Updating %s, %d, %d, %pn", str, type, ptr_type, ptr);
  68. }
  69. /* -------------------------------------------------------------------- */
  70. /* -------------------------------------------------------------------- */
  71. TOKEN *find_item(TOKEN_LIST *list, char *str, int type)
  72. {
  73. TOKEN_LIST
  74. *item;
  75. item = list;
  76. while(item != NULL)
  77. {
  78. if ((strcmp(item->token->str, str) == 0) &&
  79.     (item->token->type == type))
  80. { return item->token;
  81. }
  82. item = item->next;
  83. }
  84. return NULL;
  85. }
  86. /* -------------------------------------------------------------------- */
  87. /* Try to locate item if it already exists, update */
  88. /* it and return list. */
  89. /* If the item cannot be located, create a new item, */
  90. /* insert at the start of the list and return the new list. */
  91. /* If list is empty add item to list and return list */
  92. /* -------------------------------------------------------------------- */
  93. TOKEN_LIST *add_token_list_item(TOKEN_LIST *list, TOKEN **token, char *str, int type, int ptr_type, void *ptr)
  94. {
  95. TOKEN_LIST
  96. *list_item;
  97. TOKEN *item;
  98. lprintf(LOG_VERYVERBOSE, "Adding token '%s'n", str);
  99. item = find_item(list, str, type);
  100. if (item != NULL)
  101. {
  102. lprintf(LOG_VERYVERBOSE, "Found token '%s'n", str);
  103. update_token(item, str, type, ptr_type, ptr);
  104. *token = item;
  105. return list;
  106. }
  107. lprintf(LOG_VERYVERBOSE, "Creating token '%s'n", str);
  108. list_item       = malloc_token_list_item();
  109. list_item->next = list;
  110. update_token(list_item->token, str, type, ptr_type, ptr);
  111. *token = list_item->token;
  112. return list_item;
  113. }