Use DrawFrameControl instead of bitmaps in certain cases.
[wine] / dlls / msvcrt / environ.c
1 /*
2  * msvcrt.dll environment functions
3  *
4  * Copyright 1996,1998 Marcus Meissner
5  * Copyright 1996 Jukka Iivonen
6  * Copyright 1997,2000 Uwe Bonnes
7  * Copyright 2000 Jon Griffiths
8  */
9 #include "wine/unicode.h"
10 #include "msvcrt.h"
11
12 #include "msvcrt/stdlib.h"
13
14
15 DEFAULT_DEBUG_CHANNEL(msvcrt);
16
17 /*********************************************************************
18  *              getenv (MSVCRT.@)
19  */
20 char *MSVCRT_getenv(const char *name)
21 {
22   char *environ = GetEnvironmentStringsA();
23   char *pp,*pos = NULL;
24   unsigned int length=strlen(name);
25
26   for (pp = environ; (*pp); pp = pp + strlen(pp) +1)
27   {
28       pos =strchr(pp,'=');
29       if ((pos) && ((pos - pp) == length))
30       {
31           if (!strncasecmp(pp,name,length)) break;
32       }
33   }
34   if ((*pp)&& (pos))
35   {
36      pp = pos+1;
37      TRACE("got %s\n",pp);
38   }
39   else
40     pp = 0;
41   FreeEnvironmentStringsA( environ );
42   return pp;
43 }
44
45 /*********************************************************************
46  *              _wgetenv (MSVCRT.@)
47  */
48 WCHAR *_wgetenv(const WCHAR *name)
49 {
50   WCHAR* environ = GetEnvironmentStringsW();
51   WCHAR* pp,*pos = NULL;
52   unsigned int length=strlenW(name);
53
54   for (pp = environ; (*pp); pp = pp + strlenW(pp) + 1)
55   {
56       pos = strchrW(pp,'=');
57       if ((pos) && ((pos - pp) == length))
58       {
59           if (!strncmpiW(pp,name,length))
60           {
61               pp = pos+1;
62               TRACE("got %s\n",debugstr_w(pp));
63               /* can't free pointer since we are returning it */
64               /* should probably use MSVCRT_wenviron instead */
65               FIXME( "memory leak\n" );
66               return pp;
67           }
68       }
69   }
70   FreeEnvironmentStringsW( environ );
71   return NULL;
72 }
73
74 /*********************************************************************
75  *              _putenv (MSVCRT.@)
76  */
77 int _putenv(const char *str)
78 {
79  char name[256], value[512];
80  char *dst = name;
81
82  TRACE("%s\n", str);
83
84  if (!str)
85    return -1;
86  while (*str && *str != '=')
87   *dst++ = *str++;
88  if (!*str++)
89    return -1;
90  *dst = '\0';
91  dst = value;
92  while (*str)
93   *dst++ = *str++;
94  *dst = '\0';
95
96  return !SetEnvironmentVariableA(name, value[0] ? value : NULL);
97 }
98
99 /*********************************************************************
100  *              _wputenv (MSVCRT.@)
101  */
102 int _wputenv(const WCHAR *str)
103 {
104  WCHAR name[256], value[512];
105  WCHAR *dst = name;
106
107  TRACE("%s\n", debugstr_w(str));
108
109  if (!str)
110    return -1;
111  while (*str && *str != (WCHAR)L'=')
112   *dst++ = *str++;
113  if (!*str++)
114    return -1;
115  *dst = (WCHAR)L'\0';
116  dst = value;
117  while (*str)
118   *dst++ = *str++;
119  *dst = (WCHAR)L'\0';
120
121  return !SetEnvironmentVariableW(name, value[0] ? value : NULL);
122 }