annotate m_struct.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 49a433e2e78f
children cc170348a763
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
18258
96568be4bfdc Doxygen attack!
albeu
parents: 10718
diff changeset
1
96568be4bfdc Doxygen attack!
albeu
parents: 10718
diff changeset
2 /// \file
96568be4bfdc Doxygen attack!
albeu
parents: 10718
diff changeset
3 /// \ingroup OptionsStruct
96568be4bfdc Doxygen attack!
albeu
parents: 10718
diff changeset
4
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
5 #include "config.h"
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
6
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
7 #include <stdlib.h>
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
8 #include <string.h>
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
9
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
10 #include "m_option.h"
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
11 #include "m_struct.h"
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
12 #include "mp_msg.h"
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
13
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
14 m_option_t*
19104
2ec2301183cd marks several read-only string parameters which aren't modified inside the called function as const. Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18258
diff changeset
15 m_struct_get_field(m_struct_t* st,const char* f) {
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
16 int i;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
17
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
18 for(i = 0 ; st->fields[i].name ; i++) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
19 if(strcasecmp(st->fields[i].name,f) == 0)
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
20 return &st->fields[i];
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
21 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
22 return NULL;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
23 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
24
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
25 void*
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
26 m_struct_alloc(m_struct_t* st) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
27 int i;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
28 void* r;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
29
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
30 if(!st->defaults) {
10718
alex
parents: 10594
diff changeset
31 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s needs defaults\n",st->name);
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
32 return NULL;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
33 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
34 // Check the struct fields
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
35 for(i = 0 ; st->fields[i].name ; i++) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
36 if(st->fields[i].type->flags & M_OPT_TYPE_INDIRECT) {
23873
49a433e2e78f cosmetics: misc typo fixes
diego
parents: 19104
diff changeset
37 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s->%s: Option types with the indirect flag are forbidden.\n",st->name,st->fields[i].name);
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
38 return NULL;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
39 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
40 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
41
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
42 r = calloc(1,st->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
43 memcpy(r,st->defaults,st->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
44
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
45 for(i = 0 ; st->fields[i].name ; i++) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
46 if(st->fields[i].type->flags & M_OPT_TYPE_DYNAMIC)
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
47 memset(M_ST_MB_P(r,st->fields[i].p),0,st->fields[i].type->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
48 m_option_copy(&st->fields[i],M_ST_MB_P(r,st->fields[i].p),M_ST_MB_P(st->defaults,st->fields[i].p));
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
49 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
50 return r;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
51 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
52
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
53 int
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
54 m_struct_set(m_struct_t* st, void* obj, char* field, char* param) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
55 m_option_t* f = m_struct_get_field(st,field);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
56
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
57 if(!f) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
58 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s doesn't have any %s field\n",
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
59 st->name,field);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
60 return 0;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
61 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
62
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
63 if(f->type->parse(f,field,param,M_ST_MB_P(obj,f->p),M_CONFIG_FILE) < 0) {
9790
864cdb2debb0 Typo fix
albeu
parents: 8169
diff changeset
64 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s, field %s parsing error: %s\n",
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
65 st->name,field,param);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
66 return 0;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
67 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
68
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
69 return 1;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
70 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
71
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
72 void
19104
2ec2301183cd marks several read-only string parameters which aren't modified inside the called function as const. Patch by Stefan Huehner, stefan AT huehner-org
reynaldo
parents: 18258
diff changeset
73 m_struct_reset(m_struct_t* st, void* obj, const char* field) {
8169
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
74 m_option_t* f;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
75
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
76 if(!field) { // Reset all options
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
77 int i;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
78 for(i = 0 ; st->fields[i].name ; i++)
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
79 m_option_copy(&st->fields[i],M_ST_MB_P(obj,st->fields[i].p),M_ST_MB_P(st->defaults,st->fields[i].p));
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
80 return;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
81 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
82
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
83 // Only one
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
84 f = m_struct_get_field(st,field);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
85 if(!f) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
86 mp_msg(MSGT_CFGPARSER, MSGL_ERR,"Struct %s doesn't have any %s field\n",
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
87 st->name,field);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
88 return;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
89 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
90 m_option_copy(f,M_ST_MB_P(obj,f->p),M_ST_MB_P(st->defaults,f->p));
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
91 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
92
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
93 /// Free an allocated struct
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
94 void
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
95 m_struct_free(m_struct_t* st, void* obj) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
96 int i;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
97
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
98 for(i = 0 ; st->fields[i].name ; i++)
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
99 m_option_free(&st->fields[i],M_ST_MB_P(obj,st->fields[i].p));
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
100 free(obj);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
101 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
102
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
103 void*
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
104 m_struct_copy(m_struct_t* st, void* obj) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
105 void* r = malloc(st->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
106 int i;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
107
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
108 memcpy(r,obj,st->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
109 for(i = 0 ; st->fields[i].name ; i++) {
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
110 if(st->fields[i].type->flags & M_OPT_TYPE_DYNAMIC)
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
111 memset(M_ST_MB_P(r,st->fields[i].p),0,st->fields[i].type->size);
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
112 m_option_copy(&st->fields[i],M_ST_MB_P(r,st->fields[i].p),M_ST_MB_P(obj,st->fields[i].p));
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
113 }
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
114
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
115 return r;
7c9253521f9c A struct setter. It allow you to setup struct from some user
albeu
parents:
diff changeset
116 }