SDL_getenv.c
上传用户:sun1608
上传日期:2007-02-02
资源大小:6116k
文件大小:5k
源码类别:

流媒体/Mpeg4/MP4

开发平台:

Visual C++

  1. /*
  2.     SDL - Simple DirectMedia Layer
  3.     Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga
  4.     This library is free software; you can redistribute it and/or
  5.     modify it under the terms of the GNU Library General Public
  6.     License as published by the Free Software Foundation; either
  7.     version 2 of the License, or (at your option) any later version.
  8.     This library is distributed in the hope that it will be useful,
  9.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  11.     Library General Public License for more details.
  12.     You should have received a copy of the GNU Library General Public
  13.     License along with this library; if not, write to the Free
  14.     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  15.     Sam Lantinga
  16.     slouken@libsdl.org
  17. */
  18. #ifdef SAVE_RCSID
  19. static char rcsid =
  20.  "@(#) $Id: SDL_getenv.c,v 1.2 2002/04/22 21:38:01 wmay Exp $";
  21. #endif
  22. /* Not all environments have a working getenv()/putenv() */
  23. #ifdef TEST_MAIN
  24. #define NEED_SDL_GETENV
  25. #endif
  26. #include "SDL_getenv.h"
  27. #ifdef NEED_SDL_GETENV
  28. #include <stdlib.h>
  29. #include <string.h>
  30. static char **SDL_env = (char **)0;
  31. /* Put a variable of the form "name=value" into the environment */
  32. int SDL_putenv(const char *variable)
  33. {
  34. const char *name, *value;
  35. int added;
  36. int len, i;
  37. char **new_env;
  38. char *new_variable;
  39. /* A little error checking */
  40. if ( ! variable ) {
  41. return(-1);
  42. }
  43. name = variable;
  44. for ( value=variable; *value && (*value != '='); ++value ) {
  45. /* Keep looking for '=' */ ;
  46. }
  47. if ( *value ) {
  48. ++value;
  49. } else {
  50. return(-1);
  51. }
  52. /* Allocate memory for the variable */
  53. new_variable = (char *)malloc(strlen(variable)+1);
  54. if ( ! new_variable ) {
  55. return(-1);
  56. }
  57. strcpy(new_variable, variable);
  58. /* Actually put it into the environment */
  59. added = 0;
  60. i = 0;
  61. if ( SDL_env ) {
  62. /* Check to see if it's already there... */
  63. len = (value - name);
  64. for ( ; SDL_env[i]; ++i ) {
  65. if ( strncmp(SDL_env[i], name, len) == 0 ) {
  66. break;
  67. }
  68. }
  69. /* If we found it, just replace the entry */
  70. if ( SDL_env[i] ) {
  71. free(SDL_env[i]);
  72. SDL_env[i] = new_variable;
  73. added = 1;
  74. }
  75. }
  76. /* Didn't find it in the environment, expand and add */
  77. if ( ! added ) {
  78. new_env = realloc(SDL_env, (i+2)*sizeof(char *));
  79. if ( new_env ) {
  80. SDL_env = new_env;
  81. SDL_env[i++] = new_variable;
  82. SDL_env[i++] = (char *)0;
  83. added = 1;
  84. } else {
  85. free(new_variable);
  86. }
  87. }
  88. return (added ? 0 : -1);
  89. }
  90. /* Retrieve a variable named "name" from the environment */
  91. char *SDL_getenv(const char *name)
  92. {
  93. int len, i;
  94. char *value;
  95. value = (char *)0;
  96. if ( SDL_env ) {
  97. len = strlen(name);
  98. for ( i=0; SDL_env[i] && !value; ++i ) {
  99. if ( (strncmp(SDL_env[i], name, len) == 0) &&
  100.      (SDL_env[i][len] == '=') ) {
  101. value = &SDL_env[i][len+1];
  102. }
  103. }
  104. }
  105. return value;
  106. }
  107. #endif /* NEED_GETENV */
  108. #ifdef TEST_MAIN
  109. #include <stdio.h>
  110. int main(int argc, char *argv[])
  111. {
  112. char *value;
  113. printf("Checking for non-existent variable... ");
  114. fflush(stdout);
  115. if ( ! getenv("EXISTS") ) {
  116. printf("okayn");
  117. } else {
  118. printf("failedn");
  119. }
  120. printf("Setting FIRST=VALUE1 in the environment... ");
  121. fflush(stdout);
  122. if ( putenv("FIRST=VALUE1") == 0 ) {
  123. printf("okayn");
  124. } else {
  125. printf("failedn");
  126. }
  127. printf("Getting FIRST from the environment... ");
  128. fflush(stdout);
  129. value = getenv("FIRST");
  130. if ( value && (strcmp(value, "VALUE1") == 0) ) {
  131. printf("okayn");
  132. } else {
  133. printf("failedn");
  134. }
  135. printf("Setting SECOND=VALUE2 in the environment... ");
  136. fflush(stdout);
  137. if ( putenv("SECOND=VALUE2") == 0 ) {
  138. printf("okayn");
  139. } else {
  140. printf("failedn");
  141. }
  142. printf("Getting SECOND from the environment... ");
  143. fflush(stdout);
  144. value = getenv("SECOND");
  145. if ( value && (strcmp(value, "VALUE2") == 0) ) {
  146. printf("okayn");
  147. } else {
  148. printf("failedn");
  149. }
  150. printf("Setting FIRST=NOVALUE in the environment... ");
  151. fflush(stdout);
  152. if ( putenv("FIRST=NOVALUE") == 0 ) {
  153. printf("okayn");
  154. } else {
  155. printf("failedn");
  156. }
  157. printf("Getting FIRST from the environment... ");
  158. fflush(stdout);
  159. value = getenv("FIRST");
  160. if ( value && (strcmp(value, "NOVALUE") == 0) ) {
  161. printf("okayn");
  162. } else {
  163. printf("failedn");
  164. }
  165. printf("Checking for non-existent variable... ");
  166. fflush(stdout);
  167. if ( ! getenv("EXISTS") ) {
  168. printf("okayn");
  169. } else {
  170. printf("failedn");
  171. }
  172. return(0);
  173. }
  174. #endif /* TEST_MAIN */