annotate loader/registry.c @ 15533:ddf15d233d58

Do not switch to audio tracks whose codec private data differs from the main audio track's as this will most likely result in messed up audio output. Patch by Michael Behrisch <list () behrisch ! de>
author mosu
date Sat, 21 May 2005 06:50:08 +0000
parents f5537cc95b02
children 0783dd397f74
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 /*
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
2 * Modified for use with MPlayer, detailed CVS changelog at
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
3 * http://www.mplayerhq.hu/cgi-bin/cvsweb.cgi/main/
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"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 #include <stdio.h>
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
10 #include <stdlib.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 #include <fcntl.h>
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
12 #include <unistd.h>
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 #include <pwd.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14 #include <sys/types.h>
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
16 #include "wine/winbase.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
17 #include "wine/winreg.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
18 #include "wine/winnt.h"
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
19 #include "wine/winerror.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
21 #include "ext.h"
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
22 #include "registry.h"
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
23
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
24 //#undef TRACE
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
25 //#define TRACE printf
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
26
4384
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
27 extern char *get_path ( char * );
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
28
4384
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
29 // ...can be set before init_registry() call
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
30 char* regpathname = NULL;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
31
4384
a1d27234018f avoids warnings
pl
parents: 3465
diff changeset
32 static char* localregpathname = NULL;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
33
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
34 typedef struct reg_handle_s
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
35 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
36 int handle;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
37 char* name;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
38 struct reg_handle_s* next;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
39 struct reg_handle_s* prev;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
40 } reg_handle_t;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
41
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
42 struct reg_value
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
43 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
44 int type;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
45 char* name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
46 int len;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
47 char* value;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48 };
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
49
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
50 static struct reg_value* regs = NULL;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
51 static int reg_size;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
52 static reg_handle_t* head = NULL;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
53
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54 #define DIR -25
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
56 static void create_registry(void);
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
57 static void open_registry(void);
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
58 static void save_registry(void);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
59 static void init_registry(void);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
60
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
61
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
62 static void create_registry(void){
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
63 if(regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
64 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
65 printf("Logic error: create_registry() called with existing registry\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
66 save_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
67 return;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
68 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
69 regs=(struct reg_value*)malloc(3*sizeof(struct reg_value));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 regs[0].type=regs[1].type=DIR;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71 regs[0].name=(char*)malloc(5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 strcpy(regs[0].name, "HKLM");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 regs[1].name=(char*)malloc(5);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 strcpy(regs[1].name, "HKCU");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 regs[0].value=regs[1].value=NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76 regs[0].len=regs[1].len=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
77 reg_size=2;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
78 head = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
79 save_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
81
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
82 static void open_registry(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
83 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
84 int fd;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
85 int i;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
86 unsigned int len;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
87 if(regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
88 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
89 printf("Multiple open_registry(>\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
90 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
91 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
92 fd = open(localregpathname, O_RDONLY);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
93 if (fd == -1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
94 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
95 printf("Creating new registry\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
96 create_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
97 return;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
98 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
99 read(fd, &reg_size, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
100 regs=(struct reg_value*)malloc(reg_size*sizeof(struct reg_value));
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
101 head = 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
102 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
103 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
104 read(fd,&regs[i].type,4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
105 read(fd,&len,4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
106 regs[i].name=(char*)malloc(len+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
107 if(regs[i].name==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
108 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
109 reg_size=i+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
110 goto error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
111 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
112 read(fd, regs[i].name, len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
113 regs[i].name[len]=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
114 read(fd,&regs[i].len,4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
115 regs[i].value=(char*)malloc(regs[i].len+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
116 if(regs[i].value==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
117 {
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
118 free(regs[i].name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
119 reg_size=i+1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
120 goto error;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
121 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
122 read(fd, regs[i].value, regs[i].len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
123 regs[i].value[regs[i].len]=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
124 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
125 error:
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
126 close(fd);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
127 return;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
128 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
129
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
130 static void save_registry(void)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
131 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
132 int fd, i;
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
133 if (!regs)
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
134 init_registry();
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
135 fd = open(localregpathname, O_WRONLY | O_CREAT, 00666);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
136 if (fd == -1)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
137 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
138 printf("Failed to open registry file '%s' for writing.\n",
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
139 localregpathname);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
140 return;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
141 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
142 write(fd, &reg_size, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
143 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
144 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
145 unsigned len=strlen(regs[i].name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
146 write(fd, &regs[i].type, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
147 write(fd, &len, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
148 write(fd, regs[i].name, len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
149 write(fd, &regs[i].len, 4);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
150 write(fd, regs[i].value, regs[i].len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
151 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
152 close(fd);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
153 }
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
154
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
155 void free_registry(void)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
156 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
157 reg_handle_t* t = head;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
158 while (t)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
159 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
160 reg_handle_t* f = t;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
161 if (t->name)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
162 free(t->name);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
163 t=t->prev;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
164 free(f);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
165 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
166 head = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
167 if (regs)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
168 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
169 int i;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
170 for(i=0; i<reg_size; i++)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
171 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
172 free(regs[i].name);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
173 free(regs[i].value);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
174 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
175 free(regs);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
176 regs = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
177 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
178
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
179 if (localregpathname && localregpathname != regpathname)
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
180 free(localregpathname);
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
181 localregpathname = 0;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
182 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
183
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
184
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
185 static reg_handle_t* find_handle_by_name(const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
186 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
187 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
188 for(t=head; t; t=t->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
189 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
190 if(!strcmp(t->name, name))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
191 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
192 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
193 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
194 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
195 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
196 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
197 static struct reg_value* find_value_by_name(const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
198 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
199 int i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
200 for(i=0; i<reg_size; i++)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
201 if(!strcmp(regs[i].name, name))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
202 return regs+i;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
203 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
204 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
205 static reg_handle_t* find_handle(int handle)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
206 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
207 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
208 for(t=head; t; t=t->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
209 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
210 if(t->handle==handle)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
211 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
212 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
213 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
214 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
215 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
216 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
217 static int generate_handle()
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
218 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
219 static unsigned int zz=249;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
220 zz++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
221 while((zz==HKEY_LOCAL_MACHINE) || (zz==HKEY_CURRENT_USER))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
222 zz++;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
223 return zz;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
224 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
225
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
226 static reg_handle_t* insert_handle(long handle, const char* name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
227 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
228 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
229 t=(reg_handle_t*)malloc(sizeof(reg_handle_t));
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
230 if(head==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
231 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
232 t->prev=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
233 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
234 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
235 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
236 head->next=t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
237 t->prev=head;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
238 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
239 t->next=0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
240 t->name=(char*)malloc(strlen(name)+1);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
241 strcpy(t->name, name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
242 t->handle=handle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
243 head=t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
244 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
245 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
246 static char* build_keyname(long key, const char* subkey)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
247 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
248 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
249 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
250 if((t=find_handle(key))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
251 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
252 TRACE("Invalid key\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
253 return NULL;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
254 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
255 if(subkey==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
256 subkey="<default>";
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
257 full_name=(char*)malloc(strlen(t->name)+strlen(subkey)+10);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
258 strcpy(full_name, t->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
259 strcat(full_name, "\\");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
260 strcat(full_name, subkey);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
261 return full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
262 }
1307
d8c1b0b38edc Add prototypes to wine/loader stuff, so that we can catch __stdcall function
jkeil
parents: 340
diff changeset
263 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
264 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
265 reg_handle_t* t;
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;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
293 v->value=(char*)malloc(len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
294 memcpy(v->value, value, len);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
295 v->name=(char*)malloc(strlen(fullname)+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 #ifdef MPLAYER
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
309 regpathname = get_path("registry");
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
310 localregpathname = regpathname;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
311 #else
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
312 // regpathname is an external pointer
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
313 //
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
314 // registry.c is holding it's own internal pointer
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
315 // localregpathname - which is being allocate/deallocated
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
316
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
317 if (localregpathname == 0)
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
318 {
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
319 const char* pthn = regpathname;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
320 if (!regpathname)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
321 {
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
322 // avifile - for now reading data from user's home
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
323 struct passwd* pwent;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
324 pwent = getpwuid(geteuid());
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
325 pthn = pwent->pw_dir;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
326 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
327
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
328 localregpathname = (char*)malloc(strlen(pthn)+20);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
329 strcpy(localregpathname, pthn);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
330 strcat(localregpathname, "/.registry");
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
331 }
340
1f7c824033fb less, and more informal printfs
arpi_esp
parents: 178
diff changeset
332 #endif
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
333
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 open_registry();
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 insert_handle(HKEY_LOCAL_MACHINE, "HKLM");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
336 insert_handle(HKEY_CURRENT_USER, "HKCU");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337 }
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
338
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 static reg_handle_t* find_handle_2(long key, const char* subkey)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 if((t=find_handle(key))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
344 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 TRACE("Invalid key\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 return (reg_handle_t*)-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
347 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
348 if(subkey==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
349 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350 full_name=(char*)malloc(strlen(t->name)+strlen(subkey)+10);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 strcpy(full_name, t->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352 strcat(full_name, "\\");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
353 strcat(full_name, subkey);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 t=find_handle_by_name(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
355 free(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
356 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
359 long __stdcall RegOpenKeyExA(long key, const char* subkey, long reserved, long access, int* newkey)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
360 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 struct reg_value* v;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 TRACE("Opening key %s\n", subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
365
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
366 if(!regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
367 init_registry()
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
368 ;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 /* t=find_handle_2(key, subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
370
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
371 if(t==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
373
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 if(t==(reg_handle_t*)-1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
376 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
377 full_name=build_keyname(key, subkey);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 if(!full_name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
380 TRACE("Opening key Fullname %s\n", full_name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
381 v=find_value_by_name(full_name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
382
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 t=insert_handle(generate_handle(), full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 *newkey=t->handle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 free(full_name);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
386
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
387 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
388 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
389 long __stdcall RegCloseKey(long key)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
390 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
391 reg_handle_t *handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
392 if(key==(long)HKEY_LOCAL_MACHINE)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
393 return 0;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
394 if(key==(long)HKEY_CURRENT_USER)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
395 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
396 handle=find_handle(key);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
397 if(handle==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
398 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
399 if(handle->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
400 handle->prev->next=handle->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
401 if(handle->next)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
402 handle->next->prev=handle->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
403 if(handle->name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
404 free(handle->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
405 if(handle==head)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
406 head=head->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
407 free(handle);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
408 return 1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
409 }
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
410
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
411 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
412 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
413 struct reg_value* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
414 char* c;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
415 TRACE("Querying value %s\n", value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
416 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
417 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
418
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
419 c=build_keyname(key, value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
420 if (!c)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
421 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
422 t=find_value_by_name(c);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
423 free(c);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
424 if (t==0)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
425 return 2;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
426 if (type)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
427 *type=t->type;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
428 if (data)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
429 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
430 memcpy(data, t->value, (t->len<*count)?t->len:*count);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
431 TRACE("returning %d bytes: %d\n", t->len, *(int*)data);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
432 }
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
433 if(*count<t->len)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
434 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
435 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
436 return ERROR_MORE_DATA;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
437 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
438 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
439 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
440 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
441 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
442 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
443 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
444 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
445 void* classs, long options, long security,
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
446 void* sec_attr, int* newkey, int* status)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
447 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
448 reg_handle_t* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
449 char* fullname;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
450 struct reg_value* v;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
451 // TRACE("Creating/Opening key %s\n", name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
452 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
453 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
454
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
455 fullname=build_keyname(key, name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
456 if (!fullname)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
457 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
458 TRACE("Creating/Opening key %s\n", fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
459 v=find_value_by_name(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
460 if(v==0)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
461 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
462 int qw=45708;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
463 v=insert_reg_value(key, name, DIR, &qw, 4);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
464 if (status) *status=REG_CREATED_NEW_KEY;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
465 // return 0;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
466 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
467
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
468 t=insert_handle(generate_handle(), fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
469 *newkey=t->handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
470 free(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
471 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
472 }
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
473
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
474 /*
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
475 LONG RegEnumValue(
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
476 HKEY hKey, // handle to key to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
477 DWORD dwIndex, // index of value to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
478 LPTSTR lpValueName, // address of buffer for value string
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
479 LPDWORD lpcbValueName, // address for size of value buffer
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
480 LPDWORD lpReserved, // reserved
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
481 LPDWORD lpType, // address of buffer for type code
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
482 LPBYTE lpData, // address of buffer for value data
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
483 LPDWORD lpcbData // address for size of data buffer
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
484 );
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
485 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
486
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
487 long __stdcall RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count,
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
488 LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
489 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
490 // currenly just made to support MSZH & ZLIB
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
491 //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
492 // value, *val_count, data, *count, reg_size, data);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
493 reg_handle_t* t = find_handle(hkey);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
494 if (t && index < 10)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
495 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
496 struct reg_value* v=find_value_by_name(t->name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
497 if (v)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
498 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
499 memcpy(data, v->value, (v->len < *count) ? v->len : *count);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
500 if(*count < v->len)
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
501 *count = v->len;
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
502 if (type)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
503 *type = v->type;
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
504 //printf("Found handle %s\n", v->name);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
505 return 0;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
506 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
507 }
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
508 return ERROR_NO_MORE_ITEMS;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
509 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
510
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
511 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
512 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
513 struct reg_value* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
514 char* c;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
515 TRACE("Request to set value %s %d\n", name, *(const int*)data);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
516 if(!regs)
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
517 init_registry();
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
518
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
519 c=build_keyname(key, name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
520 if(c==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
521 return 1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
522 insert_reg_value(key, name, v2, data, size);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
523 free(c);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
524 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
525 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
526
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
527 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
528 LPDWORD lpReserved, LPSTR lpClass, LPDWORD lpcbClass,
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
529 LPFILETIME lpftLastWriteTime)
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
530 {
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
531 return ERROR_NO_MORE_ITEMS;
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
532 }