diff --git a/common/include/ivy/line-source.h b/common/include/ivy/line-source.h index f98e27e..e0961f1 100644 --- a/common/include/ivy/line-source.h +++ b/common/include/ivy/line-source.h @@ -5,12 +5,21 @@ #include struct ivy_line_source { + enum ivy_status (*s_get_name)( + struct ivy_line_source *, char *, size_t, size_t *); enum ivy_status (*s_readline)( struct ivy_line_source *, char *, size_t, size_t *, const char *); + enum ivy_status (*s_get_row)( + struct ivy_line_source *, size_t, char *, size_t, size_t *); }; +IVY_API enum ivy_status ivy_line_source_get_name( + struct ivy_line_source *src, char *buf, size_t count, size_t *nr_read); IVY_API enum ivy_status ivy_line_source_readline( struct ivy_line_source *src, char *buf, size_t count, size_t *nr_read, const char *prompt); +IVY_API enum ivy_status ivy_line_source_get_row( + struct ivy_line_source *src, size_t row, char *buf, size_t count, + size_t *nr_read); #endif diff --git a/common/line-source.c b/common/line-source.c index eb69ca3..7a499db 100644 --- a/common/line-source.c +++ b/common/line-source.c @@ -1,5 +1,15 @@ #include +enum ivy_status ivy_line_source_get_name( + struct ivy_line_source *src, char *buf, size_t count, size_t *nr_read) +{ + if (src->s_get_name) { + return src->s_get_name(src, buf, count, nr_read); + } + + return IVY_ERR_NOT_SUPPORTED; +} + enum ivy_status ivy_line_source_readline( struct ivy_line_source *src, char *buf, size_t count, size_t *nr_read, const char *prompt) @@ -10,3 +20,14 @@ enum ivy_status ivy_line_source_readline( return IVY_ERR_NOT_SUPPORTED; } + +enum ivy_status ivy_line_source_get_row( + struct ivy_line_source *src, size_t row, char *buf, size_t count, + size_t *nr_read) +{ + if (src->s_get_row) { + return src->s_get_row(src, row, buf, count, nr_read); + } + + return IVY_ERR_NOT_SUPPORTED; +}