369 */ |
370 */ |
370 #define cxPropertiesInitDefault(prop) \ |
371 #define cxPropertiesInitDefault(prop) \ |
371 cxPropertiesInit(prop, cx_properties_config_default) |
372 cxPropertiesInit(prop, cx_properties_config_default) |
372 |
373 |
373 /** |
374 /** |
374 * Sets an input buffer. |
375 * Fills the input buffer with data. |
375 * |
376 * |
376 * After calling this function, you can parse the data by calling |
377 * Currently unprocessed data is copied to a temporary buffer. |
377 * cxPropertiesNext() until the status is #CX_PROPERTIES_NO_DATA. |
|
378 * |
|
379 * @param prop the properties interface |
|
380 * @param buf a pointer to data |
|
381 * @param len the length of the data |
|
382 */ |
|
383 __attribute__((__nonnull__)) |
|
384 void cxPropertiesInput( |
|
385 CxProperties *prop, |
|
386 const char *buf, |
|
387 size_t len |
|
388 ); |
|
389 |
|
390 /** |
|
391 * Sets a new input buffer after copying the current unprocessed data |
|
392 * to a temporary buffer. |
|
393 * |
|
394 * This temporary buffer is allocated on the heap, unless you specified |
378 * This temporary buffer is allocated on the heap, unless you specified |
395 * a buffer on the stack with #cxPropertiesUseStack(). |
379 * a buffer on the stack with #cxPropertiesUseStack(). |
396 * In that case, the stack buffer is used, until the capacity is not sufficient |
380 * In that case, the stack buffer is used, until the capacity is not sufficient |
397 * anymore. |
381 * anymore. |
398 * |
382 * |
399 * When this function is called without any unprocessed data that needs to be |
383 * After calling this function, you can parse the data by calling |
400 * copied, it behaves exactly as #cxPropertiesInput(). |
384 * cxPropertiesNext() until the status is #CX_PROPERTIES_NO_DATA. |
401 * |
385 * |
402 * @param prop the properties interface |
386 * @param prop the properties interface |
403 * @param buf a pointer to data |
387 * @param buf a pointer to data |
404 * @param len the length of the data |
388 * @param len the length of the data |
405 * @return non-zero when a memory allocation was necessary but failed |
389 * @return non-zero when a memory allocation was necessary but failed |
406 */ |
390 */ |
407 __attribute__((__nonnull__)) |
391 __attribute__((__nonnull__)) |
408 int cxPropertiesFill( |
392 int cxPropertiesFilln( |
409 CxProperties *prop, |
393 CxProperties *prop, |
410 const char *buf, |
394 const char *buf, |
411 size_t len |
395 size_t len |
412 ); |
396 ); |
|
397 |
|
398 /** |
|
399 * Fills the input buffer with a string. |
|
400 * |
|
401 * Currently unprocessed data is copied to a temporary buffer. |
|
402 * This temporary buffer is allocated on the heap, unless you specified |
|
403 * a buffer on the stack with #cxPropertiesUseStack(). |
|
404 * In that case, the stack buffer is used, until the capacity is not sufficient |
|
405 * anymore. |
|
406 * |
|
407 * When this function is called without any unprocessed data that needs to be |
|
408 * copied, it behaves exactly as #cxPropertiesInput(). |
|
409 * |
|
410 * @param prop the properties interface |
|
411 * @param str the string |
|
412 * @return non-zero when a memory allocation was necessary but failed |
|
413 */ |
|
414 #define cxPropertiesFill(prop, str) _Generic((str), \ |
|
415 cxstring: cx_properties_fill_cxstr, \ |
|
416 cxmutstr: cx_properties_fill_mutstr, \ |
|
417 char*: cx_properties_fill_str, \ |
|
418 const char*: cx_properties_fill_str) \ |
|
419 (prop, str) |
|
420 |
|
421 /** |
|
422 * Implementation of cxPropertiesFill() for cxstring. |
|
423 * |
|
424 * @param prop the properties interface |
|
425 * @param str the string |
|
426 * @return non-zero when a memory allocation was necessary but failed |
|
427 */ |
|
428 __attribute__((__nonnull__)) |
|
429 static inline int cx_properties_fill_cxstr( |
|
430 CxProperties *prop, |
|
431 cxstring str |
|
432 ) { |
|
433 return cxPropertiesFilln(prop, str.ptr, str.length); |
|
434 } |
|
435 |
|
436 /** |
|
437 * Implementation of cxPropertiesFill() for cxmutstr. |
|
438 * |
|
439 * @param prop the properties interface |
|
440 * @param str the string |
|
441 * @return non-zero when a memory allocation was necessary but failed |
|
442 */ |
|
443 __attribute__((__nonnull__)) |
|
444 static inline int cx_properties_fill_mutstr( |
|
445 CxProperties *prop, |
|
446 cxmutstr str |
|
447 ) { |
|
448 return cxPropertiesFilln(prop, str.ptr, str.length); |
|
449 } |
|
450 |
|
451 /** |
|
452 * Implementation of cxPropertiesFill() for zero terminated C strings. |
|
453 * |
|
454 * @param prop the properties interface |
|
455 * @param str the string |
|
456 * @return non-zero when a memory allocation was necessary but failed |
|
457 */ |
|
458 __attribute__((__nonnull__)) |
|
459 static inline int cx_properties_fill_str( |
|
460 CxProperties *prop, |
|
461 const char *str |
|
462 ) { |
|
463 return cxPropertiesFilln(prop, str, strlen(str)); |
|
464 } |
413 |
465 |
414 /** |
466 /** |
415 * Specifies stack memory that shall be used by #cxPropertiesFill(). |
467 * Specifies stack memory that shall be used by #cxPropertiesFill(). |
416 * |
468 * |
417 * @param prop the properties interface |
469 * @param prop the properties interface |