11 * Allocate a dynamic memory block.
15 yaml_malloc(size_t size)
17 return malloc(size ? size : 1);
21 * Reallocate a dynamic memory block.
25 yaml_realloc(void *ptr, size_t size)
27 return ptr ? realloc(ptr, size ? size : 1) : malloc(size ? size : 1);
31 * Free a dynamic memory block.
41 * Create a new parser object.
47 yaml_parser_t *parser;
49 /* Allocate the parser structure. */
51 parser = yaml_malloc(sizeof(yaml_parser_t));
52 if (!parser) return NULL;
54 memset(parser, 0, sizeof(yaml_parser_t));
56 /* Allocate the raw buffer. */
58 parser->raw_buffer = yaml_malloc(YAML_RAW_BUFFER_SIZE);
59 if (!parser->raw_buffer) {
63 parser->raw_pointer = parser->raw_buffer;
64 parser->raw_unread = 0;
66 /* Allocate the character buffer. */
68 parser->buffer = yaml_malloc(YAML_BUFFER_SIZE);
69 if (!parser->buffer) {
70 yaml_free(parser->raw_buffer);
74 parser->buffer_end = parser->buffer;
75 parser->pointer = parser->buffer;
82 * Destroy a parser object.
86 yaml_parser_delete(yaml_parser_t *parser)
88 assert(parser); /* Non-NULL parser object expected. */
90 yaml_free(parser->buffer);
91 yaml_free(parser->raw_buffer);
93 memset(parser, 0, sizeof(yaml_parser_t));
99 * String read handler.
103 yaml_string_read_handler(void *data, unsigned char *buffer, size_t size,
106 yaml_string_input_t *input = data;
108 if (input->current == input->end) {
113 if (size > (input->end - input->current)) {
114 size = input->end - input->current;
117 memcpy(buffer, input->current, size);
118 input->current += size;
128 yaml_file_read_handler(void *data, unsigned char *buffer, size_t size,
131 *size_read = fread(buffer, 1, size, (FILE *)data);
132 return !ferror((FILE *)data);
136 * Set a string input.
140 yaml_parser_set_input_string(yaml_parser_t *parser,
141 unsigned char *input, size_t size)
143 assert(parser); /* Non-NULL parser object expected. */
144 assert(!parser->read_handler); /* You can set the source only once. */
145 assert(input); /* Non-NULL input string expected. */
147 parser->string_input.start = input;
148 parser->string_input.current = input;
149 parser->string_input.end = input+size;
151 parser->read_handler = yaml_string_read_handler;
152 parser->read_handler_data = &parser->string_input;
160 yaml_parser_set_input_file(yaml_parser_t *parser, FILE *file)
162 assert(parser); /* Non-NULL parser object expected. */
163 assert(!parser->read_handler); /* You can set the source only once. */
164 assert(file); /* Non-NULL file object expected. */
166 parser->read_handler = yaml_file_read_handler;
167 parser->read_handler_data = file;
171 * Set a generic input.
175 yaml_parser_set_input(yaml_parser_t *parser,
176 yaml_read_handler_t *handler, void *data)
178 assert(parser); /* Non-NULL parser object expected. */
179 assert(!parser->read_handler); /* You can set the source only once. */
180 assert(handler); /* Non-NULL read handler expected. */
182 parser->read_handler = handler;
183 parser->read_handler_data = data;
187 * Set the source encoding.
191 yaml_parser_set_encoding(yaml_parser_t *parser, yaml_encoding_t encoding)
193 assert(parser); /* Non-NULL parser object expected. */
194 assert(!parser->encoding); /* Encoding is already set or detected. */
196 parser->encoding = encoding;