libyang  2.1.30
libyang is YANG data modelling language parser and toolkit written (and providing API) in C.
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
in.h File Reference

libyang input structures and functions More...

#include <stdio.h>
#include "log.h"

Go to the source code of this file.

Typedefs

typedef enum LY_IN_TYPE LY_IN_TYPE
 Types of the parser's inputs. More...
 

Enumerations

enum  LY_IN_TYPE {
  LY_IN_ERROR = -1, LY_IN_FD, LY_IN_FILE, LY_IN_FILEPATH,
  LY_IN_MEMORY
}
 Types of the parser's inputs. More...
 

Functions

LIBYANG_API_DECL int ly_in_fd (struct ly_in *in, int fd)
 Get or reset file descriptor input handler. More...
 
LIBYANG_API_DECL FILE * ly_in_file (struct ly_in *in, FILE *f)
 Get or reset file stream input handler. More...
 
LIBYANG_API_DECL const char * ly_in_filepath (struct ly_in *in, const char *filepath, size_t len)
 Get or change the filepath of the file where the parser reads the data. More...
 
LIBYANG_API_DECL void ly_in_free (struct ly_in *in, ly_bool destroy)
 Free the input handler. More...
 
LIBYANG_API_DECL const char * ly_in_memory (struct ly_in *in, const char *str)
 Get or change memory where the data are read from. More...
 
LIBYANG_API_DECL LY_ERR ly_in_new_fd (int fd, struct ly_in **in)
 Create input handler using file descriptor. More...
 
LIBYANG_API_DECL LY_ERR ly_in_new_file (FILE *f, struct ly_in **in)
 Create input handler using file stream. More...
 
LIBYANG_API_DECL LY_ERR ly_in_new_filepath (const char *filepath, size_t len, struct ly_in **in)
 Create input handler file of the given filename. More...
 
LIBYANG_API_DECL LY_ERR ly_in_new_memory (const char *str, struct ly_in **in)
 Create input handler using memory to read data. More...
 
LIBYANG_API_DECL size_t ly_in_parsed (const struct ly_in *in)
 Get the number of parsed bytes by the last function. More...
 
LIBYANG_API_DECL LY_ERR ly_in_read (struct ly_in *in, void *buf, size_t count)
 Read bytes from an input. More...
 
LIBYANG_API_DECL LY_ERR ly_in_reset (struct ly_in *in)
 Reset the input medium to read from its beginning, so the following parser function will read from the object's beginning. More...
 
LIBYANG_API_DECL LY_ERR ly_in_skip (struct ly_in *in, size_t count)
 Just skip bytes in an input. More...
 
LIBYANG_API_DECL LY_IN_TYPE ly_in_type (const struct ly_in *in)
 Get input type of the input handler. More...
 

Detailed Description

libyang input structures and functions

Author
Radek Krejci rkrej.nosp@m.ci@c.nosp@m.esnet.nosp@m..cz Copyright (c) 2020 CESNET, z.s.p.o.

This source code is licensed under BSD 3-Clause License (the "License"). You may not use this file except in compliance with the License. You may obtain a copy of the License at

https://opensource.org/licenses/BSD-3-Clause

Definition in file in.h.

Typedef Documentation

typedef enum LY_IN_TYPE LY_IN_TYPE

Types of the parser's inputs.

Enumeration Type Documentation

enum LY_IN_TYPE

Types of the parser's inputs.

Enumerator
LY_IN_ERROR 

error value to indicate failure of the functions returning LY_IN_TYPE

LY_IN_FD 

file descriptor printer

LY_IN_FILE 

FILE stream parser

LY_IN_FILEPATH 

filepath parser

LY_IN_MEMORY 

memory parser

Definition at line 82 of file in.h.

Function Documentation

LIBYANG_API_DECL int ly_in_fd ( struct ly_in in,
int  fd 
)

Get or reset file descriptor input handler.

Parameters
[in]inInput handler.
[in]fdOptional value of a new file descriptor for the handler. If -1, only the current file descriptor value is returned.
Returns
Previous value of the file descriptor. Note that caller is responsible for closing the returned file descriptor in case of setting new descriptor fd.
-1 in case of error when setting up the new file descriptor.
LIBYANG_API_DECL FILE* ly_in_file ( struct ly_in in,
FILE *  f 
)

Get or reset file stream input handler.

Parameters
[in]inInput handler.
[in]fOptional new file stream for the handler. If NULL, only the current file stream is returned.
Returns
NULL in case of invalid argument or an error when setting up the new input file, original input handler in is untouched in this case.
Previous file stream of the handler. Note that caller is responsible for closing the returned stream in case of setting new stream f.
LIBYANG_API_DECL const char* ly_in_filepath ( struct ly_in in,
const char *  filepath,
size_t  len 
)

Get or change the filepath of the file where the parser reads the data.

Note that in case of changing the filepath, the current file is closed and a new one is created/opened instead of renaming the previous file. Also note that the previous filepath string is returned only in case of not changing it's value.

Parameters
[in]inInput handler.
[in]filepathOptional new filepath for the handler. If and only if NULL, the current filepath string is returned.
[in]lenOptional number of bytes to use from filepath. If 0, the filepath is considered to be NULL-terminated and the whole string is taken into account.
Returns
Previous filepath string in case the filepath argument is NULL.
NULL if changing filepath succeedes and ((void *)-1) otherwise.
LIBYANG_API_DECL void ly_in_free ( struct ly_in in,
ly_bool  destroy 
)

Free the input handler.

Parameters
[in]inInput handler to free.
[in]destroyFlag to free the input data buffer (for LY_IN_MEMORY) or to close stream/file descriptor (for LY_IN_FD and LY_IN_FILE)
LIBYANG_API_DECL const char* ly_in_memory ( struct ly_in in,
const char *  str 
)

Get or change memory where the data are read from.

Parameters
[in]inInput handler.
[in]strString containing the data to read. The input data are expected to be NULL-terminated. Note that in case the destroy argument of ly_in_free() is used, the input string is passed to free(), so if it is really a static string, do not use the destroy argument!
Returns
Previous starting address to read data from. Note that the caller is responsible to free the data in case of changing string pointer str.
LIBYANG_API_DECL LY_ERR ly_in_new_fd ( int  fd,
struct ly_in **  in 
)

Create input handler using file descriptor.

Parameters
[in]fdFile descriptor to use.
[out]inCreated input handler supposed to be passed to different ly*_parse() functions.
Returns
LY_SUCCESS in case of success
LY_ERR value in case of failure.
LIBYANG_API_DECL LY_ERR ly_in_new_file ( FILE *  f,
struct ly_in **  in 
)

Create input handler using file stream.

Parameters
[in]fFile stream to use.
[out]inCreated input handler supposed to be passed to different ly*_parse() functions.
Returns
LY_SUCCESS in case of success
LY_ERR value in case of failure.
LIBYANG_API_DECL LY_ERR ly_in_new_filepath ( const char *  filepath,
size_t  len,
struct ly_in **  in 
)

Create input handler file of the given filename.

Parameters
[in]filepathPath of the file where to read data.
[in]lenOptional number of bytes to use from filepath. If 0, the filepath is considered to be NULL-terminated and the whole string is taken into account.
[out]inCreated input handler supposed to be passed to different ly*_parse() functions.
Returns
LY_SUCCESS in case of success
LY_ERR value in case of failure.
LIBYANG_API_DECL LY_ERR ly_in_new_memory ( const char *  str,
struct ly_in **  in 
)

Create input handler using memory to read data.

Parameters
[in]strPointer where to start reading data. The input data are expected to be NULL-terminated. Note that in case the destroy argument of ly_in_free() is used, the input string is passed to free(), so if it is really a static string, do not use the destroy argument!
[out]inCreated input handler supposed to be passed to different ly*_parse() functions.
Returns
LY_SUCCESS in case of success
LY_ERR value in case of failure.
LIBYANG_API_DECL size_t ly_in_parsed ( const struct ly_in in)

Get the number of parsed bytes by the last function.

Parameters
[in]inIn structure used.
Returns
Number of parsed bytes.
LIBYANG_API_DECL LY_ERR ly_in_read ( struct ly_in in,
void *  buf,
size_t  count 
)

Read bytes from an input.

Does not count new lines, which is expected from the caller who has better idea about the content of the read data and can better optimize counting.

Parameters
[in]inInput structure.
[in]bufDestination buffer.
[in]countNumber of bytes to read.
Returns
LY_SUCCESS on success,
LY_EDENIED on EOF.
LIBYANG_API_DECL LY_ERR ly_in_reset ( struct ly_in in)

Reset the input medium to read from its beginning, so the following parser function will read from the object's beginning.

Note that in case the underlying output is not seekable (stream referring a pipe/FIFO/socket or the callback output type), nothing actually happens despite the function succeeds. Also note that the medium is not returned to the state it was when the handler was created. For example, file is seeked into the offset zero, not to the offset where it was opened when ly_in_new_file() was called.

Parameters
[in]inInput handler.
Returns
LY_SUCCESS in case of success
LY_ESYS in case of failure
LIBYANG_API_DECL LY_ERR ly_in_skip ( struct ly_in in,
size_t  count 
)

Just skip bytes in an input.

Does not count new lines, which is expected from the caller who has better idea about the content of the skipped data and can better optimize counting.

Parameters
[in]inInput structure.
[in]countNumber of bytes to skip.
Returns
LY_SUCCESS on success,
LY_EDENIED on EOF.
LIBYANG_API_DECL LY_IN_TYPE ly_in_type ( const struct ly_in in)

Get input type of the input handler.

Parameters
[in]inInput handler.
Returns
Type of the parser's input.