From: Joel Holdsworth Date: Wed, 21 Jan 2015 05:56:51 +0000 (-0500) Subject: input: Added preferred file extension field X-Git-Tag: libsigrok-0.4.0~670 X-Git-Url: https://sigrok.org/gitaction?a=commitdiff_plain;h=c7bc82ffa1b09a228a8395049e2b691cd7bd85f8;p=libsigrok.git input: Added preferred file extension field This fixes parts of bug #541. --- diff --git a/bindings/cxx/classes.cpp b/bindings/cxx/classes.cpp index bb709fe2..c915c8a7 100644 --- a/bindings/cxx/classes.cpp +++ b/bindings/cxx/classes.cpp @@ -1385,6 +1385,15 @@ string InputFormat::description() return valid_string(sr_input_description_get(_structure)); } +vector InputFormat::extensions() +{ + vector exts; + for (const char *const *e = sr_input_extensions_get(_structure); + e && *e; e++) + exts.push_back(*e); + return exts; +} + map> InputFormat::options() { const struct sr_option **options = sr_input_options_get(_structure); diff --git a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp index 0701688d..0542a1be 100644 --- a/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp +++ b/bindings/cxx/include/libsigrokcxx/libsigrokcxx.hpp @@ -865,6 +865,9 @@ public: string name(); /** Description of this input format. */ string description(); + /** A list of preferred file name extensions for this file format. + * @note This list is a recommendation only. */ + vector extensions(); /** Options supported by this input format. */ map > options(); /** Create an input using this input format. diff --git a/include/libsigrok/proto.h b/include/libsigrok/proto.h index 3d3e354a..9b540c1f 100644 --- a/include/libsigrok/proto.h +++ b/include/libsigrok/proto.h @@ -150,6 +150,8 @@ SR_API const struct sr_input_module **sr_input_list(void); SR_API const char *sr_input_id_get(const struct sr_input_module *in); SR_API const char *sr_input_name_get(const struct sr_input_module *in); SR_API const char *sr_input_description_get(const struct sr_input_module *in); +SR_API const char *const *sr_input_extensions_get( + const struct sr_input_module *o); SR_API const struct sr_input_module *sr_input_find(char *id); SR_API const struct sr_option **sr_input_options_get(const struct sr_input_module *in); SR_API void sr_input_options_free(const struct sr_option **options); diff --git a/src/input/binary.c b/src/input/binary.c index 5d5fc865..f9e49de1 100644 --- a/src/input/binary.c +++ b/src/input/binary.c @@ -165,6 +165,7 @@ SR_PRIV struct sr_input_module input_binary = { .id = "binary", .name = "Binary", .desc = "Raw binary", + .exts = NULL, .options = get_options, .init = init, .receive = receive, diff --git a/src/input/chronovu_la8.c b/src/input/chronovu_la8.c index 53fcd682..c28f0e0a 100644 --- a/src/input/chronovu_la8.c +++ b/src/input/chronovu_la8.c @@ -177,6 +177,7 @@ SR_PRIV struct sr_input_module input_chronovu_la8 = { .id = "chronovu-la8", .name = "Chronovu-LA8", .desc = "ChronoVu LA8", + .exts = (const char*[]){"kdt", NULL}, .metadata = { SR_INPUT_META_FILESIZE | SR_INPUT_META_REQUIRED }, .options = get_options, .format_match = format_match, diff --git a/src/input/csv.c b/src/input/csv.c index 68ab43b8..e89f99aa 100644 --- a/src/input/csv.c +++ b/src/input/csv.c @@ -819,6 +819,7 @@ SR_PRIV struct sr_input_module input_csv = { .id = "csv", .name = "CSV", .desc = "Comma-separated values", + .exts = (const char*[]){"csv", NULL}, .metadata = { SR_INPUT_META_MIMETYPE }, .options = get_options, .format_match = format_match, diff --git a/src/input/input.c b/src/input/input.c index 52924813..3c1d2beb 100644 --- a/src/input/input.c +++ b/src/input/input.c @@ -129,6 +129,25 @@ SR_API const char *sr_input_description_get(const struct sr_input_module *o) return o->desc; } +/** + * Returns the specified input module's file extensions typical for the file + * format, as a NULL terminated array, or returns a NULL pointer if there is + * no preferred extension. + * @note these are a suggestions only. + * + * @since 0.4.0 + */ +SR_API const char *const *sr_input_extensions_get( + const struct sr_input_module *o) +{ + if (!o) { + sr_err("Invalid input module NULL!"); + return NULL; + } + + return o->exts; +} + /** * Return the input module with the specified ID, or NULL if no module * with that id is found. diff --git a/src/input/vcd.c b/src/input/vcd.c index 429dd616..e1421571 100644 --- a/src/input/vcd.c +++ b/src/input/vcd.c @@ -569,6 +569,7 @@ SR_PRIV struct sr_input_module input_vcd = { .id = "vcd", .name = "VCD", .desc = "Value Change Dump", + .exts = (const char*[]){"vcd", NULL}, .metadata = { SR_INPUT_META_HEADER | SR_INPUT_META_REQUIRED }, .options = get_options, .format_match = format_match, diff --git a/src/input/wav.c b/src/input/wav.c index 647b537c..da5a3d5f 100644 --- a/src/input/wav.c +++ b/src/input/wav.c @@ -365,6 +365,7 @@ SR_PRIV struct sr_input_module input_wav = { .id = "wav", .name = "WAV", .desc = "WAV file", + .exts = (const char*[]){"wav", NULL}, .metadata = { SR_INPUT_META_HEADER | SR_INPUT_META_REQUIRED }, .format_match = format_match, .init = init, diff --git a/src/libsigrok-internal.h b/src/libsigrok-internal.h index bd2d4c74..debd2771 100644 --- a/src/libsigrok-internal.h +++ b/src/libsigrok-internal.h @@ -238,6 +238,13 @@ struct sr_input_module { */ const char *desc; + /** + * A NULL terminated array of strings containing a list of file name + * extensions typical for the input file format, or NULL if there is + * no typical extension for this file format. + */ + const char *const *exts; + /** * Zero-terminated list of metadata items the module needs to be able * to identify an input stream. Can be all-zero, if the module cannot