blob: 5ee320cb4e972681f0f8ac98c10c7747d962412b [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"
Michal Vaskoafac7822020-10-20 14:22:26 +020019
20/**
21 * @brief Parser input structure specifying where the data are read.
22 */
23struct ly_in {
24 LY_IN_TYPE type; /**< type of the output to select the output method */
25 const char *current; /**< Current position in the input data */
26 const char *func_start; /**< Input data position when the last parser function was executed */
27 const char *start; /**< Input data start */
28 size_t length; /**< mmap() length (if used) */
29 union {
30 int fd; /**< file descriptor for LY_IN_FD type */
31 FILE *f; /**< file structure for LY_IN_FILE and LY_IN_FILEPATH types */
32 struct {
33 int fd; /**< file descriptor for LY_IN_FILEPATH */
34 char *filepath; /**< stored original filepath */
35 } fpath; /**< filepath structure for LY_IN_FILEPATH */
36 } method; /**< type-specific information about the output */
Radek Krejcid54412f2020-12-17 20:25:35 +010037 uint64_t line; /**< current line of the input */
Michal Vaskoafac7822020-10-20 14:22:26 +020038};
39
40/**
Radek Krejcid54412f2020-12-17 20:25:35 +010041 * @brief Increment line counter.
42 * @param[in] IN The input handler.
43 */
44#define LY_IN_NEW_LINE(IN) \
45 (IN)->line++
46
47/**
Michal Vaskoafac7822020-10-20 14:22:26 +020048 * @brief Read bytes from an input.
49 *
Radek Krejcidd713ce2021-01-04 23:12:12 +010050 * Does not count new lines, which is expected from the caller who has better idea about
51 * the content of the read data and can better optimize counting.
52 *
Michal Vaskoafac7822020-10-20 14:22:26 +020053 * @param[in] in Input structure.
54 * @param[in] buf Destination buffer.
55 * @param[in] count Number of bytes to read.
56 * @return LY_SUCCESS on success,
57 * @return LY_EDENIED on EOF.
58 */
59LY_ERR ly_in_read(struct ly_in *in, void *buf, size_t count);
60
61/**
62 * @brief Just skip bytes in an input.
63 *
Radek Krejcidd713ce2021-01-04 23:12:12 +010064 * Does not count new lines, which is expected from the caller who has better idea about
65 * the content of the skipped data and can better optimize counting.
66 *
Michal Vaskoafac7822020-10-20 14:22:26 +020067 * @param[in] in Input structure.
68 * @param[in] count Number of bytes to skip.
69 * @return LY_SUCCESS on success,
70 * @return LY_EDENIED on EOF.
71 */
72LY_ERR ly_in_skip(struct ly_in *in, size_t count);
73
74#endif /* LY_IN_INTERNAL_H_ */