1 /* -*- Mode: c; c-basic-offset: 2 -*- 2 * 3 * sv.h - Header for libsv 4 * 5 * Copyright (C) 2009-2013, David Beckett http://www.dajobe.org/ 6 * 7 * This package is Free Software 8 * 9 * It is licensed under the following three licenses as alternatives: 10 * 1. GNU Lesser General Public License (LGPL) V2.1 or any newer version 11 * 2. GNU General Public License (GPL) V2 or any newer version 12 * 3. Apache License, V2.0 or any newer version 13 * 14 * You may not use this file except in compliance with at least one of 15 * the above three licenses. 16 * 17 * See LICENSE.txt at the top of this package for the 18 * complete terms and further detail along with the license texts for 19 * the licenses in COPYING.LIB, COPYING and LICENSE-2.0.txt respectively. 20 * 21 */ 22 23 24 /** 25 * sv_status_t: 26 * @SV_STATUS_OK: OK 27 * @SV_STATUS_FAILED: Failure 28 * @SV_STATUS_NO_MEMORY: Out of memory 29 * @SV_STATUS_LINE_FIELDS: Line had wrong number of fields 30 * 31 * Status / errors 32 */ 33 typedef enum { 34 SV_STATUS_OK = 0, 35 SV_STATUS_FAILED, 36 SV_STATUS_NO_MEMORY, 37 SV_STATUS_LINE_FIELDS 38 } sv_status_t; 39 40 typedef struct sv_s sv; 41 42 /** 43 * @sv_fields_callback: 44 * @t: sv object 45 * @user_data: user data 46 * @fields: array of fields 47 * @widths: array of field widths 48 * @count: size of @fields and @widths 49 * 50 * Callback function for sv_new() header_callback and data_callback 51 * 52 * Return value: #SV_STATUS_OK or error code 53 */ 54 typedef sv_status_t (*sv_fields_callback)(sv *t, void *user_data, char** fields, size_t *widths, size_t count); 55 56 /** 57 * @sv_line_callback: 58 * @t: sv object 59 * @user_data: user data 60 * @line: line buffer 61 * @length: size of @line 62 * 63 * Callback function for lines set via sv_set_option() with #SV_OPTION_LINE_CALLBACK 64 * 65 * Return value: #SV_STATUS_OK or error code 66 */ 67 typedef sv_status_t (*sv_line_callback)(sv *t, void *user_data, const char* line, size_t length); 68 69 70 /** 71 * sv_option_t: 72 * 73 * @SV_OPTION_NONE: internal 74 * @SV_OPTION_SAVE_HEADER: save header boolean; type long 75 * @SV_OPTION_BAD_DATA_ERROR: bad dad is error boolean; type long 76 * @SV_OPTION_QUOTED_FIELDS: fields are quoted boolean; type long 77 * @SV_OPTION_STRIP_WHITESPACE: strip whitespace around fields boolean; type long 78 * @SV_OPTION_QUOTE_CHAR: set field quote char; type int (char) 79 * @SV_OPTION_LINE_CALLBACK: Set line callback of type #sv_line_callback 80 * 81 * Option type 82 */ 83 typedef enum { 84 SV_OPTION_NONE = 0, 85 SV_OPTION_SAVE_HEADER, 86 SV_OPTION_BAD_DATA_ERROR, 87 SV_OPTION_QUOTED_FIELDS, 88 SV_OPTION_STRIP_WHITESPACE, 89 SV_OPTION_QUOTE_CHAR, 90 SV_OPTION_LINE_CALLBACK 91 } sv_option_t; 92 93 sv* sv_new(void *user_data, sv_fields_callback header_callback, sv_fields_callback data_callback, char field_sep); 94 void sv_free(sv *t); 95 96 sv_status_t sv_set_option(sv *t, sv_option_t option, ...); 97 98 int sv_get_line(sv *t); 99 const char* sv_get_header(sv *t, unsigned int i, size_t *width_p); 100 101 sv_status_t sv_parse_chunk(sv *t, char *buffer, size_t len); 102 103