comparison sidinfo.c @ 143:e481947fd051

Improve format string parsing.
author Matti Hamalainen <ccr@tnsp.org>
date Tue, 13 Jun 2017 01:24:38 +0300
parents da29f147afcb
children 6418286a7e4c
comparison
equal deleted inserted replaced
142:da29f147afcb 143:e481947fd051
294 } 294 }
295 fmt++; 295 fmt++;
296 break; 296 break;
297 297
298 case 1: 298 case 1:
299 if (*fmt == '@') 299 if (*fmt != '@')
300 { 300 {
301 if (fmt - start == 0) 301 if (*fmt == 0)
302 mode = -1;
303 fmt++;
304 break;
305 }
306
307 if (fmt - start == 0)
308 {
309 item.cmd = -2;
310 item.str = NULL;
311 item.chr = '@';
312 if (!siStackAddItem(stack, &item))
313 return FALSE;
314 }
315 else
316 {
317 char *field = th_strndup_trim(start, fmt - start, TH_TRIM_BOTH);
318
319 int ret = argMatchPSFieldError(field);
320 if (ret >= 0)
302 { 321 {
303 item.cmd = -2; 322 item.cmd = ret;
323 item.flags = 0;
304 item.str = NULL; 324 item.str = NULL;
305 item.chr = '@'; 325
306 if (!siStackAddItem(stack, &item)) 326 if (!siStackAddItem(stack, &item))
307 return FALSE; 327 rval = FALSE;
308 } 328 }
309 else 329 else
310 { 330 rval = FALSE;
311 char *field = th_strndup_trim(start, fmt - start, TH_TRIM_BOTH); 331
312 int ret = argMatchPSFieldError(field); 332 th_free(field);
313 th_free(field); 333 }
314 if (ret >= 0) 334
315 { 335 mode = 0;
316 item.cmd = ret;
317 item.str = NULL;
318 if (!siStackAddItem(stack, &item))
319 return FALSE;
320 }
321 else
322 rval = FALSE;
323 }
324 mode = 0;
325 }
326 else
327 if (*fmt == 0)
328 mode = -1;
329 fmt++; 336 fmt++;
330 break; 337 break;
331 338
332 case 2: 339 case 2:
333 if (*fmt == 0 || *fmt == '@') 340 if (*fmt == 0 || *fmt == '@')