annotate osdep/glob-win.c @ 24576:6704a924d4aa

According to MSDN a thread must call CoUninitialize once for each successful call it has made to CoInitialize or CoInitializeEx, including any call that returns S_FALSE. Only the CoUninitialize call corresponding to the CoInitialize or CoInitializeEx call that initialized the library can close it. patch by Gianluigi Tiesi, mplayer netfarm it
author diego
date Sun, 23 Sep 2007 20:37:33 +0000
parents ccf368143acd
children 531116b7693d
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
9983
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
1 #include <sys/types.h>
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
2 #include <stdio.h>
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
3
16985
08cac43f1e38 Unify include paths, -I.. is in CFLAGS.
diego
parents: 10272
diff changeset
4 #include "config.h"
9983
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
5
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
6 #include <windows.h>
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
7 #include "glob.h"
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
8
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
9 int glob(const char *pattern, int flags,
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
10 int (*errfunc)(const char *epath, int eerrno), glob_t *pglob)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
11 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
12 HANDLE searchhndl;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
13 WIN32_FIND_DATA found_file;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
14 if(errfunc)printf("glob():ERROR:Sorry errfunc not supported by this implementation\n");
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
15 if(flags)printf("glob():ERROR:Sorry no flags supported by this globimplementation\n");
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
16 //printf("PATTERN \"%s\"\n",pattern);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
17 pglob->gl_pathc = 0;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
18 searchhndl = FindFirstFile( pattern,&found_file);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
19 if(searchhndl == INVALID_HANDLE_VALUE)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
20 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
21 if(GetLastError() == ERROR_FILE_NOT_FOUND)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
22 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
23 pglob->gl_pathc = 0;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
24 //printf("could not find a file matching your search criteria\n");
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
25 return 1;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
26 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
27 else
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
28 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
29 //printf("glob():ERROR:FindFirstFile: %i\n",GetLastError());
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
30 return 1;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
31 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
32 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
33 pglob->gl_pathv = malloc(sizeof(char*));
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
34 pglob->gl_pathv[0] = strdup(found_file.cFileName);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
35 pglob->gl_pathc++;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
36 while(1)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
37 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
38 if(!FindNextFile(searchhndl,&found_file))
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
39 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
40 if(GetLastError()==ERROR_NO_MORE_FILES)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
41 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
42 //printf("glob(): no more files found\n");
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
43 break;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
44 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
45 else
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
46 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
47 //printf("glob():ERROR:FindNextFile:%i\n",GetLastError());
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
48 return 1;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
49 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
50 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
51 else
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
52 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
53 //printf("glob: found file %s\n",found_file.cFileName);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
54 pglob->gl_pathc++;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
55 pglob->gl_pathv = realloc(pglob->gl_pathv,pglob->gl_pathc * sizeof(char*));
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
56 pglob->gl_pathv[pglob->gl_pathc-1] = strdup(found_file.cFileName);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
57 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
58 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
59 FindClose(searchhndl);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
60 return 0;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
61 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
62
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
63 void globfree(glob_t *pglob)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
64 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
65 int i;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
66 for(i=0; i <pglob->gl_pathc ;i++)
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
67 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
68 free(pglob->gl_pathv[i]);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
69 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
70 free(pglob->gl_pathv);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
71 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
72
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
73 #if 0
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
74 int main(){
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
75 glob_t gg;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
76 printf("globtest\n");
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
77 glob( "*.jpeg",0,NULL,&gg );
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
78 {
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
79 int i;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
80 for(i=0;i<gg.gl_pathc;i++)printf("GLOBED:%i %s\n",i,gg.gl_pathv[i]);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
81 }
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
82 globfree(&gg);
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
83
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
84 return 0;
14c92818ab75 alternative timer and glob emulation code for mingw32 port
faust3
parents:
diff changeset
85 }
21865
ccf368143acd 100l misplaced #endif
diego
parents: 21855
diff changeset
86 #endif