blob: 684487f06b8ce51cb7a779ec5b5610002aed9749 [file] [log] [blame]
Michal Vaskoafac7822020-10-20 14:22:26 +02001/**
2 * @file in_internal.h
3 * @author Radek Krejci <rkrejci@cesnet.cz>
4 * @brief Internal structures and functions for libyang parsers
5 *
6 * Copyright (c) 2020 CESNET, z.s.p.o.
7 *
8 * This source code is licensed under BSD 3-Clause License (the "License").
9 * You may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
11 *
12 * https://opensource.org/licenses/BSD-3-Clause
13 */
14
15#ifndef LY_IN_INTERNAL_H_
16#define LY_IN_INTERNAL_H_
17
18#include "in.h"
19#include "tree_schema_internal.h"
20
21/**
22 * @brief Parser input structure specifying where the data are read.
23 */
24struct ly_in {
25 LY_IN_TYPE type; /**< type of the output to select the output method */
26 const char *current; /**< Current position in the input data */
27 const char *func_start; /**< Input data position when the last parser function was executed */
28 const char *start; /**< Input data start */
29 size_t length; /**< mmap() length (if used) */
30 union {
31 int fd; /**< file descriptor for LY_IN_FD type */
32 FILE *f; /**< file structure for LY_IN_FILE and LY_IN_FILEPATH types */
33 struct {
34 int fd; /**< file descriptor for LY_IN_FILEPATH */
35 char *filepath; /**< stored original filepath */
36 } fpath; /**< filepath structure for LY_IN_FILEPATH */
37 } method; /**< type-specific information about the output */
38};
39
40/**
41 * @brief Read bytes from an input.
42 *
43 * @param[in] in Input structure.
44 * @param[in] buf Destination buffer.
45 * @param[in] count Number of bytes to read.
46 * @return LY_SUCCESS on success,
47 * @return LY_EDENIED on EOF.
48 */
49LY_ERR ly_in_read(struct ly_in *in, void *buf, size_t count);
50
51/**
52 * @brief Just skip bytes in an input.
53 *
54 * @param[in] in Input structure.
55 * @param[in] count Number of bytes to skip.
56 * @return LY_SUCCESS on success,
57 * @return LY_EDENIED on EOF.
58 */
59LY_ERR ly_in_skip(struct ly_in *in, size_t count);
60
61#endif /* LY_IN_INTERNAL_H_ */