open-cas-linux/casadm/csvparse.h
Rafal Stefanowski acec05060d Fix license
Change license to BSD-3-Clause

Signed-off-by: Rafal Stefanowski <rafal.stefanowski@intel.com>
2021-10-28 12:46:42 +02:00

104 lines
2.5 KiB
C

/*
* Copyright(c) 2012-2021 Intel Corporation
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef __CSVPARSE_H_
#define __CSVPARSE_H_
#include <stdio.h>
/**
* @file
* @brief Generic CSV input/output library
*
*/
/**
* data structure holding info about CSV file being read.
* @note there is no need to directly manipulate any field of this structure.
* Csvparse library handles everything.
*/
struct CSVFILE_t;
/**
* This is to mimic semantics of stdio FILE*, which also is a typedef for a structure.
*/
typedef struct CSVFILE_t CSVFILE;
CSVFILE *csv_open(const char *path, const char *mode);
CSVFILE *csv_fopen(FILE *f);
CSVFILE *csv_fdopen(int fd);
/**
* close csv file. this is a direct counterpart to csv_open
*/
void csv_close(CSVFILE *cf);
/**
* close a csv without closing underlying plain fle object (so that all
* structures allocated by csv parsere are freed but syscall close(2) isn't issued
* - this is designed as counterpart to csv_fopen or csv_fdopen
*/
void csv_close_nu(CSVFILE *cf);
/**
* @param cf csv file handle to read
*
* Read line from CSV file; return 0 if line was successfully read
* return nonzero if eof or error was observed
* Error may mean end of file or i.e. memory allocation error for temporary buffers
*/
int csv_read(CSVFILE *cf);
/**
* @return true if end of file occured.
*/
int csv_feof(CSVFILE *cf);
/**
* return number of columns
* @return # of columns in a csv file
*/
unsigned int csv_count_cols(CSVFILE *line);
/**
* return given column of recently read row
* @param coln - column number
* @return pointer to field of csv file as a string; no range checking is performed,
* so if coln given exceeds actual number of columns defined in this row, error will occur
*/
char* csv_get_col(CSVFILE *cf, int coln);
/**
* return entire row as a set of pointers to individual columns (unchecked function
* returns internal representation. state is guaranteed to be correct only when
* csv_read returned success;
*/
char** csv_get_col_ptr(CSVFILE *cf);
/**
* Check if current line is empty
*
* @param cf - CVS file instance
* @retval 1 - empty line
* @retval 0 - no empty line
*/
int csv_empty_line(CSVFILE *cf);
/**
* Seek to the begining of CSV file; this allows reading file again, from the begining
*/
void csv_seek_beg(CSVFILE *cf);
/**
* This function prints CVS file in human readable format to the STD output
*
* @param path - Path to the CVS file
* @return Operation status. 0 - Success, otherwise error during printing
*/
int csv_print(const char *path);
#endif