annotate loader/registry.c @ 25661:293aeec83153

Replace the persistent CODECS_FLAG_SELECTED by a local "stringset" with an almost-trivial implementation. This allows making the builtin codec structs const, and it also makes clearer that this "selected" status is not used outside the init functions.
author reimar
date Sat, 12 Jan 2008 14:05:46 +0000
parents 13dcc81c0013
children 3cd1d60e7225
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
1 /*
18783
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
2 * Modified for use with MPlayer, detailed changelog at
0783dd397f74 CVS --> Subversion in copyright notices
diego
parents: 15166
diff changeset
3 * http://svn.mplayerhq.hu/mplayer/trunk/
15166
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
4 * $Id$
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
5 */
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
6
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
7 #include "config.h"
21261
a2e02e6b6379 Rename config.h --> debug.h and include config.h explicitly.
diego
parents: 18889
diff changeset
8 #include "debug.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10 #include <stdio.h>
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
11 #include <stdlib.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 #include <fcntl.h>
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
13 #include <unistd.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <pwd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #include <sys/types.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
17 #include "wine/winbase.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
18 #include "wine/winreg.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
19 #include "wine/winnt.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
20 #include "wine/winerror.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
22 #include "ext.h"
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
23 #include "registry.h"
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
24
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
25 //#undef TRACE
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
26 //#define TRACE printf
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
27
18889
e60c8c7399d2 get_path as const, patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18878
diff changeset
28 extern char *get_path ( const char * );
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
29
4384
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
30 // ...can be set before init_registry() call
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
31 char* regpathname = NULL;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
32
4384
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
33 static char* localregpathname = NULL;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
34
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
35 typedef struct reg_handle_s
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
36 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
37 int handle;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
38 char* name;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
39 struct reg_handle_s* next;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
40 struct reg_handle_s* prev;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
41 } reg_handle_t;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
42
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 struct reg_value
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 int type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 char* name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 char* value;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
50
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
51 static struct reg_value* regs = NULL;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
52 static int reg_size;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
53 static reg_handle_t* head = NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 #define DIR -25
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
57 static void create_registry(void);
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
58 static void open_registry(void);
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
59 static void save_registry(void);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
60 static void init_registry(void);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
62
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
63 static void create_registry(void){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 if(regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 printf("Logic error: create_registry() called with existing registry\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 save_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
68 return;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
69 }
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
70 regs=malloc(3*sizeof(struct reg_value));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 regs[0].type=regs[1].type=DIR;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
72 regs[0].name=malloc(5);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 strcpy(regs[0].name, "HKLM");
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
74 regs[1].name=malloc(5);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 strcpy(regs[1].name, "HKCU");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 regs[0].value=regs[1].value=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 regs[0].len=regs[1].len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
78 reg_size=2;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
79 head = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 save_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
81 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
82
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
83 static void open_registry(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 int fd;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
86 int i;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
87 unsigned int len;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 if(regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 printf("Multiple open_registry(>\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
92 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
93 fd = open(localregpathname, O_RDONLY);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
94 if (fd == -1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 printf("Creating new registry\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 create_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
98 return;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
99 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 read(fd, &reg_size, 4);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
101 regs=malloc(reg_size*sizeof(struct reg_value));
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
102 head = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 read(fd,&regs[i].type,4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 read(fd,&len,4);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
107 regs[i].name=malloc(len+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 if(regs[i].name==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 reg_size=i+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 goto error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 read(fd, regs[i].name, len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 regs[i].name[len]=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 read(fd,&regs[i].len,4);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
116 regs[i].value=malloc(regs[i].len+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 if(regs[i].value==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
118 {
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
119 free(regs[i].name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 reg_size=i+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 goto error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 read(fd, regs[i].value, regs[i].len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 regs[i].value[regs[i].len]=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 error:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 close(fd);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
130
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
131 static void save_registry(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
132 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
133 int fd, i;
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
134 if (!regs)
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
135 init_registry();
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
136 fd = open(localregpathname, O_WRONLY | O_CREAT, 00666);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
137 if (fd == -1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
138 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
139 printf("Failed to open registry file '%s' for writing.\n",
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
140 localregpathname);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
141 return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 write(fd, &reg_size, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
145 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
146 unsigned len=strlen(regs[i].name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 write(fd, &regs[i].type, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 write(fd, &len, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 write(fd, regs[i].name, len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 write(fd, &regs[i].len, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 write(fd, regs[i].value, regs[i].len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 close(fd);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
154 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
155
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
156 void free_registry(void)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
157 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
158 reg_handle_t* t = head;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
159 while (t)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
160 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
161 reg_handle_t* f = t;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
162 if (t->name)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
163 free(t->name);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
164 t=t->prev;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
165 free(f);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
166 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
167 head = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
168 if (regs)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
169 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
170 int i;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
171 for(i=0; i<reg_size; i++)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
172 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
173 free(regs[i].name);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
174 free(regs[i].value);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
175 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
176 free(regs);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
177 regs = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
178 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
179
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
180 if (localregpathname && localregpathname != regpathname)
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
181 free(localregpathname);
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
182 localregpathname = 0;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
183 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
184
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
185
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 static reg_handle_t* find_handle_by_name(const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 for(t=head; t; t=t->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 if(!strcmp(t->name, name))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 static struct reg_value* find_value_by_name(const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 if(!strcmp(regs[i].name, name))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 return regs+i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 static reg_handle_t* find_handle(int handle)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 for(t=head; t; t=t->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 if(t->handle==handle)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
216 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
217 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 static int generate_handle()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
219 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
220 static unsigned int zz=249;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 zz++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 while((zz==HKEY_LOCAL_MACHINE) || (zz==HKEY_CURRENT_USER))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 zz++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 return zz;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 static reg_handle_t* insert_handle(long handle, const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 reg_handle_t* t;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
230 t=malloc(sizeof(reg_handle_t));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 if(head==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 t->prev=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 head->next=t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 t->prev=head;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 t->next=0;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
241 t->name=malloc(strlen(name)+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 strcpy(t->name, name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 t->handle=handle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 head=t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 static char* build_keyname(long key, const char* subkey)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 if((t=find_handle(key))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 TRACE("Invalid key\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 return NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 if(subkey==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 subkey="<default>";
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
258 full_name=malloc(strlen(t->name)+strlen(subkey)+10);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259 strcpy(full_name, t->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 strcat(full_name, "\\");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 strcat(full_name, subkey);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 return full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
263 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
264 static struct reg_value* insert_reg_value(int handle, const char* name, int type, const void* value, int len)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
266 struct reg_value* v;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
267 char* fullname;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
268 if((fullname=build_keyname(handle, name))==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
269 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
270 TRACE("Invalid handle\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
271 return NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
272 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
273
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
274 if((v=find_value_by_name(fullname))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
275 //creating new value in registry
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
276 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
277 if(regs==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
278 create_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
279 regs=(struct reg_value*)realloc(regs, sizeof(struct reg_value)*(reg_size+1));
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
280 //regs=(struct reg_value*)my_realloc(regs, sizeof(struct reg_value)*(reg_size+1));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
281 v=regs+reg_size;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
282 reg_size++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
283 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
284 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
285 //replacing old one
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
286 {
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
287 free(v->value);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
288 free(v->name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
289 }
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
290 TRACE("RegInsert '%s' %p v:%d len:%d\n", name, value, *(int*)value, len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
291 v->type=type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
292 v->len=len;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
293 v->value=malloc(len);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 memcpy(v->value, value, len);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
295 v->name=malloc(strlen(fullname)+1);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
296 strcpy(v->name, fullname);
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
297 free(fullname);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
298 save_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
299 return v;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
300 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
301
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
302 static void init_registry(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
303 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
304 TRACE("Initializing registry\n");
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
305 // can't be free-ed - it's static and probably thread
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
306 // unsafe structure which is stored in glibc
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
307
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
308 regpathname = get_path("registry");
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
309 localregpathname = regpathname;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
310
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
311 open_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
312 insert_handle(HKEY_LOCAL_MACHINE, "HKLM");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
313 insert_handle(HKEY_CURRENT_USER, "HKCU");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
314 }
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
315
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
316 static reg_handle_t* find_handle_2(long key, const char* subkey)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 if((t=find_handle(key))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 TRACE("Invalid key\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 return (reg_handle_t*)-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 if(subkey==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 return t;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
327 full_name=malloc(strlen(t->name)+strlen(subkey)+10);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
328 strcpy(full_name, t->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329 strcat(full_name, "\\");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 strcat(full_name, subkey);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
331 t=find_handle_by_name(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 free(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
336 long __stdcall RegOpenKeyExA(long key, const char* subkey, long reserved, long access, int* newkey)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
338 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 struct reg_value* v;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 TRACE("Opening key %s\n", subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
342
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 if(!regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 init_registry()
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
345 ;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 /* t=find_handle_2(key, subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
347
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 if(t==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 if(t==(reg_handle_t*)-1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
353 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
354 full_name=build_keyname(key, subkey);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
355 if(!full_name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
357 TRACE("Opening key Fullname %s\n", full_name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
358 v=find_value_by_name(full_name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
359
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 t=insert_handle(generate_handle(), full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 *newkey=t->handle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 free(full_name);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
363
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
365 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
366 long __stdcall RegCloseKey(long key)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
368 reg_handle_t *handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
369 if(key==(long)HKEY_LOCAL_MACHINE)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
370 return 0;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
371 if(key==(long)HKEY_CURRENT_USER)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373 handle=find_handle(key);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 if(handle==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 if(handle->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
377 handle->prev->next=handle->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 if(handle->next)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 handle->next->prev=handle->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
380 if(handle->name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
381 free(handle->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
382 if(handle==head)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 head=head->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 free(handle);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 return 1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
386 }
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
387
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
388 long __stdcall RegQueryValueExA(long key, const char* value, int* reserved, int* type, int* data, int* count)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
389 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
390 struct reg_value* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
391 char* c;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
392 TRACE("Querying value %s\n", value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
393 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
394 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
395
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
396 c=build_keyname(key, value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
397 if (!c)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
398 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
399 t=find_value_by_name(c);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
400 free(c);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
401 if (t==0)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
402 return 2;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
403 if (type)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
404 *type=t->type;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
405 if (data)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
406 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
407 memcpy(data, t->value, (t->len<*count)?t->len:*count);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
408 TRACE("returning %d bytes: %d\n", t->len, *(int*)data);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
409 }
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
410 if(*count<t->len)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
411 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
412 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
413 return ERROR_MORE_DATA;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
414 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
415 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
416 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
417 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
418 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
419 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
420 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
421 long __stdcall RegCreateKeyExA(long key, const char* name, long reserved,
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
422 void* classs, long options, long security,
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
423 void* sec_attr, int* newkey, int* status)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
424 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
425 reg_handle_t* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
426 char* fullname;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
427 struct reg_value* v;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
428 // TRACE("Creating/Opening key %s\n", name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
429 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
430 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
431
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
432 fullname=build_keyname(key, name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
433 if (!fullname)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
434 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
435 TRACE("Creating/Opening key %s\n", fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
436 v=find_value_by_name(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
437 if(v==0)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
438 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
439 int qw=45708;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
440 v=insert_reg_value(key, name, DIR, &qw, 4);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
441 if (status) *status=REG_CREATED_NEW_KEY;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
442 // return 0;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
443 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
444
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
445 t=insert_handle(generate_handle(), fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
446 *newkey=t->handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
447 free(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
448 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
449 }
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
450
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
451 /*
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
452 LONG RegEnumValue(
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
453 HKEY hKey, // handle to key to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
454 DWORD dwIndex, // index of value to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
455 LPTSTR lpValueName, // address of buffer for value string
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
456 LPDWORD lpcbValueName, // address for size of value buffer
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
457 LPDWORD lpReserved, // reserved
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
458 LPDWORD lpType, // address of buffer for type code
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
459 LPBYTE lpData, // address of buffer for value data
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
460 LPDWORD lpcbData // address for size of data buffer
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
461 );
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
462 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
463
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
464 long __stdcall RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count,
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
465 LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
466 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
467 // currenly just made to support MSZH & ZLIB
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
468 //printf("Reg Enum 0x%x %d %s %d data: %p %d %d >%s<\n", hkey, index,
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
469 // value, *val_count, data, *count, reg_size, data);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
470 reg_handle_t* t = find_handle(hkey);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
471 if (t && index < 10)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
472 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
473 struct reg_value* v=find_value_by_name(t->name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
474 if (v)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
475 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
476 memcpy(data, v->value, (v->len < *count) ? v->len : *count);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
477 if(*count < v->len)
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
478 *count = v->len;
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
479 if (type)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
480 *type = v->type;
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
481 //printf("Found handle %s\n", v->name);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
482 return 0;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
483 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
484 }
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
485 return ERROR_NO_MORE_ITEMS;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
486 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
487
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
488 long __stdcall RegSetValueExA(long key, const char* name, long v1, long v2, const void* data, long size)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
489 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
490 char* c;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
491 TRACE("Request to set value %s %d\n", name, *(const int*)data);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
492 if(!regs)
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
493 init_registry();
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
494
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
495 c=build_keyname(key, name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
496 if(c==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
497 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
498 insert_reg_value(key, name, v2, data, size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
499 free(c);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
500 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
501 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
502
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
503 long __stdcall RegEnumKeyExA(HKEY hKey, DWORD dwIndex, LPSTR lpName, LPDWORD lpcbName,
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
504 LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass,
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
505 LPFILETIME lpftLastWriteTime)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
506 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
507 return ERROR_NO_MORE_ITEMS;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
508 }