annotate loader/registry.c @ 32676:db882cd69776

Do not #define _WIN32 on the command line for Cygwin. Newer Cygwin versions no longer do this and hopefully we should be able to survive without this hack as well. This change necessitates adapting two #ifdefs in the MPlayer codebase. It is committed untested as I do not have access to a Cygwin system.
author diego
date Thu, 06 Jan 2011 12:42:59 +0000
parents 8fa2f43cb760
children
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 */
f5537cc95b02 Mark modified imported files as such to comply with GPL ¡ø2a.
diego
parents: 9965
diff changeset
5
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
6 #include "config.h"
21261
a2e02e6b6379 Rename config.h --> debug.h and include config.h explicitly.
diego
parents: 18889
diff changeset
7 #include "debug.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
30901
76a13038105e Rename get_path.[ch] --> path.[ch].
diego
parents: 30702
diff changeset
24 #include "path.h"
28233
bfb8ccb245a9 #include the appropriate header instead of using local declarations.
diego
parents: 28051
diff changeset
25
128
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
26 //#undef TRACE
28091b3caff9 DLL loader updated from avifile-0.60beta4
arpi_esp
parents: 1
diff changeset
27 //#define TRACE printf
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
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 }
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
69 regs=malloc(3*sizeof(struct reg_value));
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 regs[0].type=regs[1].type=DIR;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
71 regs[0].name=malloc(5);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 strcpy(regs[0].name, "HKLM");
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
73 regs[1].name=malloc(5);
1
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);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
100 regs=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);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
106 regs[i].name=malloc(len+1);
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);
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
115 regs[i].value=malloc(regs[i].len+1);
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;
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 31139
diff changeset
161 free(t->name);
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
162 t=t->prev;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
163 free(f);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
164 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
165 head = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
166 if (regs)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
167 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
168 int i;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
169 for(i=0; i<reg_size; i++)
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
170 {
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
171 free(regs[i].name);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
172 free(regs[i].value);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
173 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
174 free(regs);
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
175 regs = 0;
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
176 }
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
177
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
178 if (localregpathname && localregpathname != regpathname)
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
179 free(localregpathname);
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
180 localregpathname = 0;
3134
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
181 }
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
182
181db9e5a887 avifile sync again... :(
arpi
parents: 3128
diff changeset
183
25807
3cd1d60e7225 Disable unused functions find_handle_2, find_handle_by_name, fixes the warning:
diego
parents: 24387
diff changeset
184 #if 0
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 }
25807
3cd1d60e7225 Disable unused functions find_handle_2, find_handle_by_name, fixes the warning:
diego
parents: 24387
diff changeset
197 #endif
1
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 }
29212
eda346733b8c Add missing 'void' to parameterless function declarations.
diego
parents: 28233
diff changeset
218 static int generate_handle(void)
1
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();
30702
9fc9d1e788aa Do not cast the results of malloc/calloc/realloc.
diego
parents: 30219
diff changeset
279 regs = 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
25807
3cd1d60e7225 Disable unused functions find_handle_2, find_handle_by_name, fixes the warning:
diego
parents: 24387
diff changeset
316 #if 0
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
317 static reg_handle_t* find_handle_2(long key, const char* subkey)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
318 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
319 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
320 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
321 if((t=find_handle(key))==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
322 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
323 TRACE("Invalid key\n");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
324 return (reg_handle_t*)-1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
325 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
326 if(subkey==NULL)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
327 return t;
18878
3bf0d70b4c7f rm unnecesary casts from void* - part 2
reynaldo
parents: 18783
diff changeset
328 full_name=malloc(strlen(t->name)+strlen(subkey)+10);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
329 strcpy(full_name, t->name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
330 strcat(full_name, "\\");
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
331 strcat(full_name, subkey);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
332 t=find_handle_by_name(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
333 free(full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
334 return t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
335 }
25807
3cd1d60e7225 Disable unused functions find_handle_2, find_handle_by_name, fixes the warning:
diego
parents: 24387
diff changeset
336 #endif
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
337
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
338 long __stdcall RegOpenKeyExA(long key, const char* subkey, long reserved, long access, int* newkey)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
339 {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
340 char* full_name;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
341 reg_handle_t* t;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
342 struct reg_value* v;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
343 TRACE("Opening key %s\n", subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
344
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
345 if(!regs)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
346 init_registry()
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 /* t=find_handle_2(key, subkey);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
349
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
350 if(t==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
351 return -1;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
352
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
353 if(t==(reg_handle_t*)-1)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
354 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
355 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
356 full_name=build_keyname(key, subkey);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
357 if(!full_name)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
358 return -1;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
359 TRACE("Opening key Fullname %s\n", full_name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
360 v=find_value_by_name(full_name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
361
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
362 t=insert_handle(generate_handle(), full_name);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
363 *newkey=t->handle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
364 free(full_name);
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 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
367 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
368 long __stdcall RegCloseKey(long key)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
369 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
370 reg_handle_t *handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
371 if(key==(long)HKEY_LOCAL_MACHINE)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
372 return 0;
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
373 if(key==(long)HKEY_CURRENT_USER)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
374 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
375 handle=find_handle(key);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
376 if(handle==0)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
377 return 0;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
378 if(handle->prev)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
379 handle->prev->next=handle->next;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
380 if(handle->next)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
381 handle->next->prev=handle->prev;
32537
8fa2f43cb760 Remove most of the NULL pointer check before free all over the code
cboesch
parents: 31139
diff changeset
382 free(handle->name);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
383 if(handle==head)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
384 head=head->prev;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
385 free(handle);
30219
f08c45c46433 Fix RegCloseKey to not return an error on success.
reimar
parents: 29212
diff changeset
386 return 0;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
387 }
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 RegQueryValueExA(long key, const char* value, int* reserved, int* type, int* data, int* count)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
390 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
391 struct reg_value* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
392 char* c;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
393 TRACE("Querying value %s\n", value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
394 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
395 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
396
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
397 c=build_keyname(key, value);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
398 if (!c)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
399 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
400 t=find_value_by_name(c);
31139
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
401 if (t==0) {
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
402 // Hacks for CineForm.
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
403 if (strcmp(c, "HKCU\\SOFTWARE\\CineForm\\DecoderProperties\\Resolution") == 0) {
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
404 if (data)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
405 *data = 1000;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
406 if (type)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
407 *type = REG_DWORD;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
408 if (count)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
409 *count = sizeof(DWORD);
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
410 free(c);
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
411 return ERROR_SUCCESS;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
412 }
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
413 if (strcmp(c, "HKCU\\SOFTWARE\\CineForm\\DecoderProperties\\PixelFormats") == 0) {
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
414 if (data)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
415 *data = 0xffff;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
416 if (type)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
417 *type = REG_DWORD;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
418 if (count)
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
419 *count = sizeof(DWORD);
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
420 free(c);
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
421 return ERROR_SUCCESS;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
422 }
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
423 free(c);
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
424 return ERROR_FILE_NOT_FOUND;
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
425 }
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
426 free(c);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
427 if (type)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
428 *type=t->type;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
429 if (data)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
430 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
431 memcpy(data, t->value, (t->len<*count)?t->len:*count);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
432 TRACE("returning %d bytes: %d\n", t->len, *(int*)data);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
433 }
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
434 if(*count<t->len)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
435 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
436 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
437 return ERROR_MORE_DATA;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
438 }
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
439 else
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
440 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
441 *count=t->len;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
442 }
31139
9a2e299dc256 Add final missing bits of CineForm HD support on Linux (via the Windows
sesse
parents: 30901
diff changeset
443 return ERROR_SUCCESS;
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
444 }
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
445 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
446 void* classs, long options, long security,
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
447 void* sec_attr, int* newkey, int* status)
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
448 {
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
449 reg_handle_t* t;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
450 char* fullname;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
451 struct reg_value* v;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
452 // TRACE("Creating/Opening key %s\n", name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
453 if(!regs)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
454 init_registry();
3465
4dad31e655b6 avifile merge. kabi: indent changes really suxxxx
arpi
parents: 3138
diff changeset
455
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
456 fullname=build_keyname(key, name);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
457 if (!fullname)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
458 return 1;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
459 TRACE("Creating/Opening key %s\n", fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
460 v=find_value_by_name(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
461 if(v==0)
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
462 {
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
463 int qw=45708;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
464 v=insert_reg_value(key, name, DIR, &qw, 4);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
465 if (status) *status=REG_CREATED_NEW_KEY;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
466 // return 0;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
467 }
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
468
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
469 t=insert_handle(generate_handle(), fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
470 *newkey=t->handle;
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
471 free(fullname);
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 4384
diff changeset
472 return 0;
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
473 }
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
474
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
475 /*
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
476 LONG RegEnumValue(
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
477 HKEY hKey, // handle to key to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
478 DWORD dwIndex, // index of value to query
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
479 LPTSTR lpValueName, // address of buffer for value string
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
480 LPDWORD lpcbValueName, // address for size of value buffer
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
481 LPDWORD lpReserved, // reserved
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
482 LPDWORD lpType, // address of buffer for type code
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
483 LPBYTE lpData, // address of buffer for value data
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
484 LPDWORD lpcbData // address for size of data buffer
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 */
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
487
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
488 long __stdcall RegEnumValueA(HKEY hkey, DWORD index, LPSTR value, LPDWORD val_count,
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
489 LPDWORD reserved, LPDWORD type, LPBYTE data, LPDWORD count)
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
490 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
491 // currenly just made to support MSZH & ZLIB
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
492 //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
493 // value, *val_count, data, *count, reg_size, data);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
494 reg_handle_t* t = find_handle(hkey);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
495 if (t && index < 10)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
496 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
497 struct reg_value* v=find_value_by_name(t->name);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
498 if (v)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
499 {
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
500 memcpy(data, v->value, (v->len < *count) ? v->len : *count);
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
501 if(*count < v->len)
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
502 *count = v->len;
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
503 if (type)
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
504 *type = v->type;
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
505 //printf("Found handle %s\n", v->name);
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
506 return 0;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
507 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
508 }
3128
392316004607 avifile sync... maybe broken, tell me if so.
arpi
parents: 1416
diff changeset
509 return ERROR_NO_MORE_ITEMS;
1416
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
510 }
8e841fe5668b partial avifile-CVS merge
arpi
parents: 1307
diff changeset
511
9965
692c4467da42 cygwin support patch by Sascha Sommer
alex
parents: 7386
diff changeset
512 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
513 {
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 }