comparison libmpdemux/dvbin.c @ 16516:89ead8b64b69

removed dependency on glibc's %a in sscanf()
author nicodvb
date Sun, 18 Sep 2005 19:17:23 +0000
parents 4d8a0ecce6ac
children 6ff3379a0862
comparison
equal deleted inserted replaced
16515:1218c5859ce8 16516:89ead8b64b69
127 127
128 static dvb_channels_list *dvb_get_channels(char *filename, int type) 128 static dvb_channels_list *dvb_get_channels(char *filename, int type)
129 { 129 {
130 dvb_channels_list *list; 130 dvb_channels_list *list;
131 FILE *f; 131 FILE *f;
132 uint8_t line[CHANNEL_LINE_LEN]; 132 char line[CHANNEL_LINE_LEN], *colon;
133 133
134 int fields, cnt, pcnt; 134 int fields, cnt, pcnt, k;
135 dvb_channel_t *ptr, *tmp, chn; 135 dvb_channel_t *ptr, *tmp, chn;
136 char *tmp_lcr, *tmp_hier, *inv, *bw, *cr, *mod, *transm, *gi, *vpid_str, *apid_str; 136 char tmp_lcr[256], tmp_hier[256], inv[256], bw[256], cr[256], mod[256], transm[256], gi[256], vpid_str[256], apid_str[256];
137 const char *cbl_conf = "%a[^:]:%d:%a[^:]:%d:%a[^:]:%a[^:]:%a[^:]:%a[^:]\n"; 137 const char *cbl_conf = "%d:%255[^:]:%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
138 const char *sat_conf = "%a[^:]:%d:%c:%d:%d:%a[^:]:%a[^:]\n"; 138 const char *sat_conf = "%d:%c:%d:%d:%255[^:]:%255[^:]\n";
139 const char *ter_conf = "%a[^:]:%d:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]:%a[^:]\n"; 139 const char *ter_conf = "%d:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]:%255[^:]\n";
140 const char *atsc_conf = "%a[^:]:%d:%a[^:]:%a[^:]:%a[^:]\n"; 140 const char *atsc_conf = "%d:%255[^:]:%255[^:]:%255[^:]\n";
141 141
142 mp_msg(MSGT_DEMUX, MSGL_V, "CONFIG_READ FILE: %s, type: %d\n", filename, type); 142 mp_msg(MSGT_DEMUX, MSGL_V, "CONFIG_READ FILE: %s, type: %d\n", filename, type);
143 if((f=fopen(filename, "r"))==NULL) 143 if((f=fopen(filename, "r"))==NULL)
144 { 144 {
145 mp_msg(MSGT_DEMUX, MSGL_FATAL, "CAN'T READ CONFIG FILE %s\n", filename); 145 mp_msg(MSGT_DEMUX, MSGL_FATAL, "CAN'T READ CONFIG FILE %s\n", filename);
162 continue; 162 continue;
163 163
164 if((line[0] == '#') || (strlen(line) == 0)) 164 if((line[0] == '#') || (strlen(line) == 0))
165 continue; 165 continue;
166 166
167 167 colon = index(line, ':');
168 apid_str = vpid_str = NULL; 168 if(colon)
169 {
170 k = colon - line;
171 if(!k)
172 continue;
173 ptr->name = (char*) malloc(k+1);
174 if(! ptr->name)
175 continue;
176 strncpy(ptr->name, line, k);
177 ptr->name[k] = 0;
178 }
179 else
180 continue;
181 k++;
182 apid_str[0] = vpid_str[0] = 0;
169 ptr->pids_cnt = 0; 183 ptr->pids_cnt = 0;
184 ptr->freq = 0;
170 if(type == TUNER_TER) 185 if(type == TUNER_TER)
171 { 186 {
172 fields = sscanf(line, ter_conf, 187 fields = sscanf(&line[k], ter_conf,
173 &ptr->name, &ptr->freq, &inv, &bw, &cr, &tmp_lcr, &mod, 188 &ptr->freq, inv, bw, cr, tmp_lcr, mod,
174 &transm, &gi, &tmp_hier, &vpid_str, &apid_str); 189 transm, gi, tmp_hier, vpid_str, apid_str);
175 mp_msg(MSGT_DEMUX, MSGL_V, 190 mp_msg(MSGT_DEMUX, MSGL_V,
176 "TER, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d", 191 "TER, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d",
177 list->NUM_CHANNELS, fields, ptr->name, ptr->freq); 192 list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
178 } 193 }
179 else if(type == TUNER_CBL) 194 else if(type == TUNER_CBL)
180 { 195 {
181 fields = sscanf(line, cbl_conf, 196 fields = sscanf(&line[k], cbl_conf,
182 &ptr->name, &ptr->freq, &inv, &ptr->srate, 197 &ptr->freq, inv, &ptr->srate,
183 &cr, &mod, &vpid_str, &apid_str); 198 cr, mod, vpid_str, apid_str);
184 mp_msg(MSGT_DEMUX, MSGL_V, 199 mp_msg(MSGT_DEMUX, MSGL_V,
185 "CBL, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d", 200 "CBL, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d",
186 list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate); 201 list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate);
187 } 202 }
188 #ifdef DVB_ATSC 203 #ifdef DVB_ATSC
189 else if(type == TUNER_ATSC) 204 else if(type == TUNER_ATSC)
190 { 205 {
191 fields = sscanf(line, atsc_conf, 206 fields = sscanf(&line[k], atsc_conf,
192 &ptr->name, &ptr->freq, &mod, &vpid_str, &apid_str); 207 &ptr->freq, mod, vpid_str, apid_str);
193 mp_msg(MSGT_DEMUX, MSGL_V, 208 mp_msg(MSGT_DEMUX, MSGL_V,
194 "ATSC, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d\n", 209 "ATSC, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d\n",
195 list->NUM_CHANNELS, fields, ptr->name, ptr->freq); 210 list->NUM_CHANNELS, fields, ptr->name, ptr->freq);
196 } 211 }
197 #endif 212 #endif
198 else //SATELLITE 213 else //SATELLITE
199 { 214 {
200 fields = sscanf(line, sat_conf, 215 fields = sscanf(&line[k], sat_conf,
201 &ptr->name, &ptr->freq, &ptr->pol, &ptr->diseqc, &ptr->srate, &vpid_str, &apid_str); 216 &ptr->freq, &ptr->pol, &ptr->diseqc, &ptr->srate, vpid_str, apid_str);
202 ptr->pol = toupper(ptr->pol); 217 ptr->pol = toupper(ptr->pol);
203 ptr->freq *= 1000UL; 218 ptr->freq *= 1000UL;
204 ptr->srate *= 1000UL; 219 ptr->srate *= 1000UL;
205 ptr->tone = -1; 220 ptr->tone = -1;
206 ptr->inv = INVERSION_AUTO; 221 ptr->inv = INVERSION_AUTO;
212 mp_msg(MSGT_DEMUX, MSGL_V, 227 mp_msg(MSGT_DEMUX, MSGL_V,
213 "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d", 228 "SAT, NUM: %d, NUM_FIELDS: %d, NAME: %s, FREQ: %d, SRATE: %d, POL: %c, DISEQC: %d",
214 list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate, ptr->pol, ptr->diseqc); 229 list->NUM_CHANNELS, fields, ptr->name, ptr->freq, ptr->srate, ptr->pol, ptr->diseqc);
215 } 230 }
216 231
217 if(vpid_str != NULL) 232 if(vpid_str[0])
218 { 233 {
219 pcnt = sscanf(vpid_str, "%d+%d+%d+%d+%d+%d+%d", &ptr->pids[0], &ptr->pids[1], &ptr->pids[2], &ptr->pids[3], 234 pcnt = sscanf(vpid_str, "%d+%d+%d+%d+%d+%d+%d", &ptr->pids[0], &ptr->pids[1], &ptr->pids[2], &ptr->pids[3],
220 &ptr->pids[4], &ptr->pids[5], &ptr->pids[6]); 235 &ptr->pids[4], &ptr->pids[5], &ptr->pids[6]);
221 if(pcnt > 0) 236 if(pcnt > 0)
222 { 237 {
223 ptr->pids_cnt = pcnt; 238 ptr->pids_cnt = pcnt;
224 fields++; 239 fields++;
225 } 240 }
226 } 241 }
227 242
228 if(apid_str != NULL) 243 if(apid_str[0])
229 { 244 {
230 cnt = ptr->pids_cnt; 245 cnt = ptr->pids_cnt;
231 pcnt = sscanf(apid_str, "%d+%d+%d+%d+%d+%d+%d+%d", &ptr->pids[cnt], &ptr->pids[cnt+1], &ptr->pids[cnt+2], 246 pcnt = sscanf(apid_str, "%d+%d+%d+%d+%d+%d+%d+%d", &ptr->pids[cnt], &ptr->pids[cnt+1], &ptr->pids[cnt+2],
232 &ptr->pids[cnt+3], &ptr->pids[cnt+4], &ptr->pids[cnt+5], &ptr->pids[cnt+6], &ptr->pids[cnt+7]); 247 &ptr->pids[cnt+3], &ptr->pids[cnt+4], &ptr->pids[cnt+5], &ptr->pids[cnt+6], &ptr->pids[cnt+7]);
233 if(pcnt > 0) 248 if(pcnt > 0)
235 ptr->pids_cnt += pcnt; 250 ptr->pids_cnt += pcnt;
236 fields++; 251 fields++;
237 } 252 }
238 } 253 }
239 254
240 if((fields < 3) || (ptr->pids_cnt <= 0) || (ptr->freq == 0) || (strlen(ptr->name) == 0)) 255 if((fields < 2) || (ptr->pids_cnt <= 0) || (ptr->freq == 0) || (strlen(ptr->name) == 0))
241 continue; 256 continue;
242 257
243 258
244 ptr->pids[ptr->pids_cnt] = 0; //PID 0 is the PAT 259 ptr->pids[ptr->pids_cnt] = 0; //PID 0 is the PAT
245 ptr->pids_cnt++; 260 ptr->pids_cnt++;