]> sigrok.org Git - libsigrok.git/commitdiff
sr: Mark API functions with SR_API/SR_PRIV.
authorUwe Hermann <redacted>
Wed, 1 Feb 2012 22:40:35 +0000 (23:40 +0100)
committerUwe Hermann <redacted>
Wed, 1 Feb 2012 23:03:17 +0000 (00:03 +0100)
Use SR_API to mark public API symbols, and SR_PRIV for private symbols.

Variables and functions marked 'static' are private already and don't
need SR_PRIV. However, functions which are not static (because they need
to be used in other libsigrok-internal files) but are also not meant to
be part of the public libsigrok API, must use SR_PRIV.

This uses the 'visibility' feature of gcc (requires gcc >= 4.0).

Details: http://gcc.gnu.org/wiki/Visibility

31 files changed:
README
backend.c
configure.ac
datastore.c
device.c
filter.c
hardware/alsa/alsa.c
hardware/asix-sigma/asix-sigma.c
hardware/common/ezusb.c
hardware/common/serial.c
hardware/demo/demo.c
hardware/link-mso19/link-mso19.c
hardware/saleae-logic/saleae-logic.c
hardware/zeroplus-logic-cube/gl_usb.c
hwplugin.c
input/input.c
log.c
output/analog.c
output/binary.c
output/csv.c
output/gnuplot.c
output/ols.c
output/output.c
output/text/text.c
output/vcd.c
session.c
session_file.c
sigrok-internal.h
sigrok-proto.h
sigrok.h.in
strutil.c

diff --git a/README b/README
index ae7a55a6ca44338e19350b4cee9c29237b91d80d..986973e38073a2e64a5ea005b6d69566cf73e420 100644 (file)
--- a/README
+++ b/README
@@ -25,7 +25,7 @@ Requirements
 ------------
 
  - git
- - gcc
+ - gcc (>= 4.0)
  - make
  - autoconf >= 2.63
  - automake >= 1.11
index 0e22e6ed00a5eddff32bf8ad70ca1b3edecc1ea9..8f5fd1f449e8e26b3efa11c10f2c09713036c72a 100644 (file)
--- a/backend.c
+++ b/backend.c
@@ -26,7 +26,7 @@
  *
  * @return SR_OK upon success, a (negative) error code otherwise.
  */
-int sr_init(void)
+SR_API int sr_init(void)
 {
        return load_hwplugins();
 }
@@ -36,7 +36,7 @@ int sr_init(void)
  *
  * @return SR_OK upon success, a (negative) error code otherwise.
  */
-int sr_exit(void)
+SR_API int sr_exit(void)
 {
        sr_cleanup_hwplugins();
 
index be5137b54d77e9addb8cab97b77615a984b3c8cb..afa88f60d26f01f254476454fe62ad6d47103730 100644 (file)
@@ -40,7 +40,9 @@ AH_TOP([#ifndef LIBSIGROK_CONFIG_H
 #define LIBSIGROK_CONFIG_H    /* To stop multiple inclusions. */])
 AH_BOTTOM([#endif /* LIBSIGROK_CONFIG_H */])
 
-CFLAGS="-g -Wall -Wextra"
+# Enable more compiler warnings via -Wall and -Wextra. Add -fvisibility=hidden
+# and enforce use of SR_API to explicitly mark all public API functions.
+CFLAGS="-g -Wall -Wextra -fvisibility=hidden"
 
 # Checks for programs.
 AC_PROG_CXX
index 3d72c99d794b904e6fa28e9ed4199c8e4caf489c..27fe03e4283212414651dfc9843f2ab5ff21cadf 100644 (file)
@@ -48,7 +48,7 @@ static gpointer new_chunk(struct sr_datastore **ds);
  *         or SR_ERR_ARG upon invalid arguments. If something other than SR_OK
  *         is returned, the value of 'ds' is undefined.
  */
-int sr_datastore_new(int unitsize, struct sr_datastore **ds)
+SR_API int sr_datastore_new(int unitsize, struct sr_datastore **ds)
 {
        if (!ds) {
                sr_err("ds: %s: ds was NULL", __func__);
@@ -83,7 +83,7 @@ int sr_datastore_new(int unitsize, struct sr_datastore **ds)
  *
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments.
  */
-int sr_datastore_destroy(struct sr_datastore *ds)
+SR_API int sr_datastore_destroy(struct sr_datastore *ds)
 {
        GSList *chunk;
 
@@ -129,8 +129,8 @@ int sr_datastore_destroy(struct sr_datastore *ds)
  *         or SR_ERR_ARG upon invalid arguments. If something other than SR_OK
  *         is returned, the value/state of 'ds' is undefined.
  */
-int sr_datastore_put(struct sr_datastore *ds, void *data, unsigned int length,
-                    int in_unitsize, int *probelist)
+SR_API int sr_datastore_put(struct sr_datastore *ds, void *data,
+               unsigned int length, int in_unitsize, int *probelist)
 {
        unsigned int stored;
        int capacity, size, num_chunks, chunk_bytes_free, chunk_offset;
index 30649cd4f64b0ac8165b452a599f1544c867c6a9..19fd6a14afba39af557889256e4b7182cae2bd8b 100644 (file)
--- a/device.c
+++ b/device.c
@@ -57,7 +57,7 @@ static GSList *devices = NULL;
  *
  * @return SR_OK upon success, SR_ERR upon errors.
  */
-int sr_device_scan(void)
+SR_API int sr_device_scan(void)
 {
        GSList *plugins, *l;
        struct sr_device_plugin *plugin;
@@ -91,7 +91,7 @@ int sr_device_scan(void)
  *
  * @return The list (GSList) of detected devices, or NULL if none were found.
  */
-GSList *sr_device_list(void)
+SR_API GSList *sr_device_list(void)
 {
        if (!devices)
                sr_device_scan();
@@ -119,8 +119,8 @@ GSList *sr_device_list(void)
  *
  * @return Pointer to the newly allocated device, or NULL upon errors.
  */
-struct sr_device *sr_device_new(const struct sr_device_plugin *plugin,
-                               int plugin_index)
+SR_API struct sr_device *sr_device_new(const struct sr_device_plugin *plugin,
+                                      int plugin_index)
 {
        struct sr_device *device;
 
@@ -156,7 +156,7 @@ struct sr_device *sr_device_new(const struct sr_device_plugin *plugin,
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_clear(struct sr_device *device)
+SR_API int sr_device_clear(struct sr_device *device)
 {
        unsigned int pnum;
 
@@ -188,7 +188,7 @@ int sr_device_clear(struct sr_device *device)
  *         upon other errors.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_probe_clear(struct sr_device *device, int probenum)
+SR_API int sr_device_probe_clear(struct sr_device *device, int probenum)
 {
        struct sr_probe *p;
 
@@ -237,7 +237,7 @@ int sr_device_probe_clear(struct sr_device *device, int probenum)
  *         or SR_ERR_ARG upon invalid arguments.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_probe_add(struct sr_device *device, const char *name)
+SR_API int sr_device_probe_add(struct sr_device *device, const char *name)
 {
        struct sr_probe *p;
        int probenum;
@@ -285,8 +285,8 @@ int sr_device_probe_add(struct sr_device *device, const char *name)
  * @return A pointer to the requested probe's 'struct sr_probe', or NULL
  *         if the probe could not be found.
  */
-struct sr_probe *sr_device_probe_find(const struct sr_device *device,
-                                     int probenum)
+SR_API struct sr_probe *sr_device_probe_find(const struct sr_device *device,
+                                            int probenum)
 {
        GSList *l;
        struct sr_probe *p, *found_probe;
@@ -328,8 +328,8 @@ struct sr_probe *sr_device_probe_find(const struct sr_device *device,
  *         upon other errors.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_probe_name(struct sr_device *device, int probenum,
-                        const char *name)
+SR_API int sr_device_probe_name(struct sr_device *device, int probenum,
+                               const char *name)
 {
        struct sr_probe *p;
 
@@ -364,7 +364,7 @@ int sr_device_probe_name(struct sr_device *device, int probenum,
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_trigger_clear(struct sr_device *device)
+SR_API int sr_device_trigger_clear(struct sr_device *device)
 {
        struct sr_probe *p;
        unsigned int pnum; /* TODO: uint16_t? */
@@ -407,8 +407,8 @@ int sr_device_trigger_clear(struct sr_device *device)
  *         upon other errors.
  *         If something other than SR_OK is returned, 'device' is unchanged.
  */
-int sr_device_trigger_set(struct sr_device *device, int probenum,
-                         const char *trigger)
+SR_API int sr_device_trigger_set(struct sr_device *device, int probenum,
+                                const char *trigger)
 {
        struct sr_probe *p;
 
@@ -449,7 +449,7 @@ int sr_device_trigger_set(struct sr_device *device, int probenum,
  *         FALSE is also returned upon invalid input parameters or other
  *         error conditions.
  */
-gboolean sr_device_has_hwcap(const struct sr_device *device, int hwcap)
+SR_API gboolean sr_device_has_hwcap(const struct sr_device *device, int hwcap)
 {
        int *capabilities, i;
 
index 5075bd1ff38d7557a0179bcf0f1e0cf05d6db000..bfed99db4e6cff606388eec60f58d14dc23d2374 100644 (file)
--- a/filter.c
+++ b/filter.c
  *         If something other than SR_OK is returned, the values of
  *         out_unitsize, data_out, and length_out are undefined.
  */
-int sr_filter_probes(int in_unitsize, int out_unitsize, const int *probelist,
-                    const unsigned char *data_in, uint64_t length_in,
-                    char **data_out, uint64_t *length_out)
+SR_API int sr_filter_probes(int in_unitsize, int out_unitsize,
+                           const int *probelist, const unsigned char *data_in,
+                           uint64_t length_in, char **data_out,
+                           uint64_t *length_out)
 {
        unsigned int in_offset, out_offset;
        int num_enabled_probes, out_bit, i;
index 7a5189c03b0b94f557a15c6130e27bc0e8bd33c2..ddfb95fa9f9a6c020ba6337d669ce356d9f87959 100644 (file)
@@ -20,7 +20,6 @@
 
 /* Note: This driver doesn't compile, analog support in sigrok is WIP. */
 
-#include "config.h" /* Must come before sigrok.h */
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
index 4cb5e1030ebbdf1f2cd4d78341a4260db2b1fe87..87a3f20003f7f3af905007355f686d81116983e9 100644 (file)
@@ -23,7 +23,6 @@
  * ASIX SIGMA Logic Analyzer Driver
  */
 
-#include "config.h"
 #include <glib.h>
 #include <glib/gstdio.h>
 #include <ftdi.h>
index 426af3ab6e3a27e88bb28cbe333d8f39814ab00c..a8a84174f99e18c9872145b9ab6888d01e5e9eed 100644 (file)
 #include <stdio.h>
 #include <errno.h>
 #include <string.h>
-#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
 
-int ezusb_reset(struct libusb_device_handle *hdl, int set_clear)
+SR_PRIV int ezusb_reset(struct libusb_device_handle *hdl, int set_clear)
 {
        int err;
        unsigned char buf[1];
@@ -46,7 +45,8 @@ int ezusb_reset(struct libusb_device_handle *hdl, int set_clear)
        return err;
 }
 
-int ezusb_install_firmware(libusb_device_handle *hdl, const char *filename)
+SR_PRIV int ezusb_install_firmware(libusb_device_handle *hdl,
+                                  const char *filename)
 {
        FILE *fw;
        int offset, chunksize, err, result;
@@ -82,8 +82,8 @@ int ezusb_install_firmware(libusb_device_handle *hdl, const char *filename)
        return result;
 }
 
-int ezusb_upload_firmware(libusb_device *dev, int configuration,
-                         const char *filename)
+SR_PRIV int ezusb_upload_firmware(libusb_device *dev, int configuration,
+                                 const char *filename)
 {
        struct libusb_device_handle *hdl;
        int err;
index 80b6f22cd2a37e2be1edae8e1344956343397863..4866230c0f204af79dd479330cb27745b2c10f95 100644 (file)
@@ -38,7 +38,7 @@
 static HANDLE hdl;
 #endif
 
-const char *serial_port_glob[] = {
+static const char *serial_port_glob[] = {
        /* Linux */
        "/dev/ttyS*",
        "/dev/ttyUSB*",
@@ -50,7 +50,7 @@ const char *serial_port_glob[] = {
        NULL,
 };
 
-GSList *list_serial_ports(void)
+SR_PRIV GSList *list_serial_ports(void)
 {
        GSList *ports;
 
@@ -75,7 +75,7 @@ GSList *list_serial_ports(void)
        return ports;
 }
 
-int serial_open(const char *pathname, int flags)
+SR_PRIV int serial_open(const char *pathname, int flags)
 {
 #ifdef _WIN32
        /* FIXME: Don't hardcode COM1. */
@@ -94,7 +94,7 @@ int serial_open(const char *pathname, int flags)
  * Close the serial port.
  * Returns 0 upon success, -1 upon failure.
  */
-int serial_close(int fd)
+SR_PRIV int serial_close(int fd)
 {
 #ifdef _WIN32
        /* Returns non-zero upon success, 0 upon failure. */
@@ -109,7 +109,7 @@ int serial_close(int fd)
  * Flush serial port buffers (if any).
  * Returns 0 upon success, -1 upon failure.
  */
-int serial_flush(int fd)
+SR_PRIV int serial_flush(int fd)
 {
 #ifdef _WIN32
        /* Returns non-zero upon success, 0 upon failure. */
@@ -124,7 +124,7 @@ int serial_flush(int fd)
  * Write a number of bytes to the specified serial port.
  * Returns the number of bytes written, or -1 upon failure.
  */
-int serial_write(int fd, const void *buf, size_t count)
+SR_PRIV int serial_write(int fd, const void *buf, size_t count)
 {
 #ifdef _WIN32
        DWORD tmp = 0;
@@ -142,7 +142,7 @@ int serial_write(int fd, const void *buf, size_t count)
  * Read a number of bytes from the specified serial port.
  * Returns the number of bytes read, or -1 upon failure.
  */
-int serial_read(int fd, void *buf, size_t count)
+SR_PRIV int serial_read(int fd, void *buf, size_t count)
 {
 #ifdef _WIN32
        DWORD tmp = 0;
@@ -156,7 +156,7 @@ int serial_read(int fd, void *buf, size_t count)
 #endif
 }
 
-void *serial_backup_params(int fd)
+SR_PRIV void *serial_backup_params(int fd)
 {
 #ifdef _WIN32
        /* TODO */
@@ -175,7 +175,7 @@ void *serial_backup_params(int fd)
 #endif
 }
 
-void serial_restore_params(int fd, void *backup)
+SR_PRIV void serial_restore_params(int fd, void *backup)
 {
 #ifdef _WIN32
        /* TODO */
@@ -190,8 +190,8 @@ void serial_restore_params(int fd, void *backup)
  * flowcontrol: 1 = rts/cts, 2 = xon/xoff
  * parity: 0 = none, 1 = even, 2 = odd
  */
-int serial_set_params(int fd, int speed, int bits, int parity, int stopbits,
-                     int flowcontrol)
+SR_PRIV int serial_set_params(int fd, int speed, int bits, int parity,
+                             int stopbits, int flowcontrol)
 {
 #ifdef _WIN32
        DCB dcb;
index 9fe35ae8689b755a9732559f1a92f8399dd5d0e8..05f19e1d2a81390c50c7afb272d826058c568cba 100644 (file)
@@ -27,7 +27,6 @@
 #include <fcntl.h>
 #define pipe(fds) _pipe(fds, 4096, _O_BINARY)
 #endif
-#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
 
index f6fe115b3a9a10358918601f2bf7d9be1c5dd4b3..961d3bac42834adeaa1f6e8fe6397283d6ab7d63 100644 (file)
@@ -30,7 +30,6 @@
 #include <arpa/inet.h>
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 #include "link-mso19.h"
 
 #define USB_VENDOR "3195"
index 25ef94dd12c448d89f414818600cb8c8412fb286..fb434fa3707aeee1843cad2b6fe2dffdb093cedb 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/time.h>
 #include <inttypes.h>
 #include <glib.h>
 #include <libusb.h>
+#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
 #include "saleae-logic.h"
index 3ba083264f44615abdae4d5c63566e61c9c98de5..7353f65db0bc252ec4cab0aa1d88808b8ce44208 100644 (file)
@@ -31,6 +31,7 @@
 
 #include <libusb.h>
 #include <stdio.h>
+#include "sigrok.h"
 #include "sigrok-internal.h"
 #include "gl_usb.h"
 
index 8ec8c30c6008049225b178a04beeeb463ce492ca..626e448389874d200417f0db1f3679e3df76b476 100644 (file)
@@ -17,7 +17,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include <stdlib.h>
 #include <stdio.h>
 #include <sys/types.h>
@@ -35,7 +34,7 @@ static GSList *plugins;
  * options.
  */
 /* TODO: This shouldn't be a global. */
-struct sr_hwcap_option sr_hwcap_options[] = {
+SR_API struct sr_hwcap_option sr_hwcap_options[] = {
        {SR_HWCAP_SAMPLERATE, SR_T_UINT64, "Sample rate", "samplerate"},
        {SR_HWCAP_CAPTURE_RATIO, SR_T_UINT64, "Pre-trigger capture ratio", "captureratio"},
        {SR_HWCAP_PATTERN_MODE, SR_T_CHAR, "Pattern generator mode", "patternmode"},
@@ -69,7 +68,7 @@ extern struct sr_device_plugin alsa_plugin_info;
 #endif
 
 /* TODO: No linked list needed, this can be a simple array. */
-int load_hwplugins(void)
+SR_PRIV int load_hwplugins(void)
 {
 #ifdef HAVE_LA_DEMO
        plugins = g_slist_append(plugins, (gpointer *)&demo_plugin_info);
@@ -101,12 +100,12 @@ int load_hwplugins(void)
        return SR_OK;
 }
 
-GSList *sr_list_hwplugins(void)
+SR_API GSList *sr_list_hwplugins(void)
 {
        return plugins;
 }
 
-int sr_init_hwplugins(struct sr_device_plugin *plugin)
+SR_API int sr_init_hwplugins(struct sr_device_plugin *plugin)
 {
        int num_devices, num_probes, i, j;
        int num_initialized_devices = 0;
@@ -136,7 +135,7 @@ int sr_init_hwplugins(struct sr_device_plugin *plugin)
        return num_initialized_devices;
 }
 
-void sr_cleanup_hwplugins(void)
+SR_API void sr_cleanup_hwplugins(void)
 {
        struct sr_device_plugin *plugin;
        GSList *l;
@@ -148,7 +147,7 @@ void sr_cleanup_hwplugins(void)
        }
 }
 
-struct sr_device_instance *sr_device_instance_new(int index, int status,
+SR_API struct sr_device_instance *sr_device_instance_new(int index, int status,
                const char *vendor, const char *model, const char *version)
 {
        struct sr_device_instance *sdi;
@@ -167,8 +166,8 @@ struct sr_device_instance *sr_device_instance_new(int index, int status,
        return sdi;
 }
 
-struct sr_device_instance *sr_get_device_instance(GSList *device_instances,
-                                                 int device_index)
+SR_API struct sr_device_instance *sr_get_device_instance(
+               GSList *device_instances, int device_index)
 {
        struct sr_device_instance *sdi;
        GSList *l;
@@ -183,7 +182,7 @@ struct sr_device_instance *sr_get_device_instance(GSList *device_instances,
        return NULL;
 }
 
-void sr_device_instance_free(struct sr_device_instance *sdi)
+SR_API void sr_device_instance_free(struct sr_device_instance *sdi)
 {
        g_free(sdi->priv);
        g_free(sdi->vendor);
@@ -194,7 +193,7 @@ void sr_device_instance_free(struct sr_device_instance *sdi)
 
 #ifdef HAVE_LIBUSB_1_0
 
-struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
+SR_PRIV struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
                        uint8_t address, struct libusb_device_handle *hdl)
 {
        struct sr_usb_device_instance *udi;
@@ -209,7 +208,7 @@ struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
        return udi;
 }
 
-void sr_usb_device_instance_free(struct sr_usb_device_instance *usb)
+SR_PRIV void sr_usb_device_instance_free(struct sr_usb_device_instance *usb)
 {
        /* Avoid compiler warnings. */
        (void)usb;
@@ -219,7 +218,7 @@ void sr_usb_device_instance_free(struct sr_usb_device_instance *usb)
 
 #endif
 
-struct sr_serial_device_instance *sr_serial_device_instance_new(
+SR_PRIV struct sr_serial_device_instance *sr_serial_device_instance_new(
                                                const char *port, int fd)
 {
        struct sr_serial_device_instance *serial;
@@ -233,12 +232,13 @@ struct sr_serial_device_instance *sr_serial_device_instance_new(
        return serial;
 }
 
-void sr_serial_device_instance_free(struct sr_serial_device_instance *serial)
+SR_PRIV void sr_serial_device_instance_free(
+               struct sr_serial_device_instance *serial)
 {
        free(serial->port);
 }
 
-int sr_find_hwcap(int *capabilities, int hwcap)
+SR_API int sr_find_hwcap(int *capabilities, int hwcap)
 {
        int i;
 
@@ -250,7 +250,7 @@ int sr_find_hwcap(int *capabilities, int hwcap)
        return FALSE;
 }
 
-struct sr_hwcap_option *sr_find_hwcap_option(int hwcap)
+SR_API struct sr_hwcap_option *sr_find_hwcap_option(int hwcap)
 {
        int i;
 
index f2d242d0cd1aad3eb1152229558d7fa952c3a6c8..3f60b1a81aa7f851d2a6ffca9d9765689eef78f0 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include "sigrok.h"
+#include "sigrok-internal.h"
 
 extern struct sr_input_format input_chronovu_la8;
 extern struct sr_input_format input_binary;
@@ -29,7 +30,7 @@ static struct sr_input_format *input_module_list[] = {
        NULL,
 };
 
-struct sr_input_format **sr_input_list(void)
+SR_API struct sr_input_format **sr_input_list(void)
 {
        return input_module_list;
 }
diff --git a/log.c b/log.c
index 844f58b2de47fd4483ee3d0840f62bfd7b1f8fca..697c1087ad82b0a421d616b831c0bd4b4a1bbc68 100644 (file)
--- a/log.c
+++ b/log.c
@@ -35,7 +35,7 @@ static int sr_loglevel = SR_LOG_WARN; /* Show errors+warnings per default. */
  *                 SR_LOG_INFO, SR_LOG_DBG, or SR_LOG_SPEW).
  * @return SR_OK upon success, SR_ERR_ARG upon invalid loglevel.
  */
-int sr_set_loglevel(int loglevel)
+SR_API int sr_set_loglevel(int loglevel)
 {
        if (loglevel < SR_LOG_NONE || loglevel > SR_LOG_SPEW) {
                sr_err("log: %s: invalid loglevel %d", __func__, loglevel);
@@ -54,7 +54,7 @@ int sr_set_loglevel(int loglevel)
  *
  * @return The currently configured libsigrok loglevel.
  */
-int sr_get_loglevel(void)
+SR_API int sr_get_loglevel(void)
 {
        return sr_loglevel;
 }
@@ -73,7 +73,7 @@ static int sr_logv(int loglevel, const char *format, va_list args)
        return ret;
 }
 
-int sr_log(int loglevel, const char *format, ...)
+SR_PRIV int sr_log(int loglevel, const char *format, ...)
 {
        int ret;
        va_list args;
@@ -85,7 +85,7 @@ int sr_log(int loglevel, const char *format, ...)
        return ret;
 }
 
-int sr_spew(const char *format, ...)
+SR_PRIV int sr_spew(const char *format, ...)
 {
        int ret;
        va_list args;
@@ -97,7 +97,7 @@ int sr_spew(const char *format, ...)
        return ret;
 }
 
-int sr_dbg(const char *format, ...)
+SR_PRIV int sr_dbg(const char *format, ...)
 {
        int ret;
        va_list args;
@@ -109,7 +109,7 @@ int sr_dbg(const char *format, ...)
        return ret;
 }
 
-int sr_info(const char *format, ...)
+SR_PRIV int sr_info(const char *format, ...)
 {
        int ret;
        va_list args;
@@ -121,7 +121,7 @@ int sr_info(const char *format, ...)
        return ret;
 }
 
-int sr_warn(const char *format, ...)
+SR_PRIV int sr_warn(const char *format, ...)
 {
        int ret;
        va_list args;
@@ -133,7 +133,7 @@ int sr_warn(const char *format, ...)
        return ret;
 }
 
-int sr_err(const char *format, ...)
+SR_PRIV int sr_err(const char *format, ...)
 {
        int ret;
        va_list args;
index 5f9fcd55168e2fc0eec41e70ae3739185fd6549c..65c8c96540a412567c4e7c841506f4f4e8cd8f35 100644 (file)
@@ -24,7 +24,6 @@
 #include <string.h>
 #include <glib.h>
 #include "sigrok.h"
-#include "config.h"
 
 #define DEFAULT_BPL_BITS 64
 #define DEFAULT_BPL_HEX  192
index 039d10bcea3d09428fafc29cc47ea2c39466ffa6..daf0feab8dc4e3cf18a003eccf23281fc2728421 100644 (file)
@@ -23,7 +23,6 @@
 #include <glib.h>
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 
 static int data(struct sr_output *o, const char *data_in, uint64_t length_in,
                char **data_out, uint64_t *length_out)
index d56a023d7e7d3b3cf478935c29cc4af123cfd6c7..48c2021883ad21fa97dc2b59a2f66f8264b62ab3 100644 (file)
@@ -21,9 +21,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
+#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 
 struct context {
        unsigned int num_enabled_probes;
index 39b2d2ee43e2cf5d714dba0f953cf9a52d2f93cf..77ca39fe59c4d90da234201621bdb85b16ad464b 100644 (file)
@@ -21,9 +21,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
+#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 
 struct context {
        unsigned int num_enabled_probes;
index 8cc613ac6f709fe0dc0085c45ba1c12be36797ea..92d1d106de57b9ab09542102401b0a7b39869625 100644 (file)
@@ -30,7 +30,6 @@
 #include <glib.h>
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 
 struct context {
        GString *header;
index e04b33906dbd394e0e457e1306a3b1c87bd80dfe..8d363f6a325a4555f6d316e45d079bb7b313f424 100644 (file)
@@ -18,6 +18,7 @@
  */
 
 #include "sigrok.h"
+#include "sigrok-internal.h"
 
 extern struct sr_output_format output_text_bits;
 extern struct sr_output_format output_text_hex;
@@ -46,7 +47,7 @@ static struct sr_output_format *output_module_list[] = {
        NULL,
 };
 
-struct sr_output_format **sr_output_list(void)
+SR_API struct sr_output_format **sr_output_list(void)
 {
        return output_module_list;
 }
index 9cac6ed0c697cf048da670579cd8bbd32ae218af..ad3e91d0e1856d52af4d9866bc52f85360510662 100644 (file)
@@ -22,8 +22,8 @@
 #include <stdio.h>
 #include <string.h>
 #include <glib.h>
-#include "sigrok.h"
 #include "config.h"
+#include "sigrok.h"
 #include "text.h"
 
 void flush_linebufs(struct context *ctx, char *outbuf)
index c15e9f077855a5402ce7f5accf1ce372b4668227..a0f70e372b99a2f21e7df1b31e8035d927df5b32 100644 (file)
@@ -22,9 +22,9 @@
 #include <stdlib.h>
 #include <string.h>
 #include <glib.h>
+#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
-#include "config.h"
 
 struct context {
        int num_enabled_probes;
index bd50bd9dcaba23b7b51dbd2b10277592c105ed16..0c21c7caa9fa5f5d5e2c3919d272b221b734f220 100644 (file)
--- a/session.c
+++ b/session.c
@@ -17,7 +17,6 @@
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include <stdio.h>
 #include <stdlib.h>
 #include <unistd.h>
@@ -56,7 +55,7 @@ static int source_timeout = -1;
  *
  * @return A pointer to the newly allocated session, or NULL upon errors.
  */
-struct sr_session *sr_session_new(void)
+SR_API struct sr_session *sr_session_new(void)
 {
        if (!(session = calloc(1, sizeof(struct sr_session)))) {
                sr_err("session: %s: session malloc failed", __func__);
@@ -73,7 +72,7 @@ struct sr_session *sr_session_new(void)
  *
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_destroy(void)
+SR_API int sr_session_destroy(void)
 {
        if (!session) {
                sr_warn("session: %s: session was NULL", __func__);
@@ -101,7 +100,7 @@ int sr_session_destroy(void)
  *
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_device_clear(void)
+SR_API int sr_session_device_clear(void)
 {
        if (!session) {
                sr_warn("session: %s: session was NULL", __func__);
@@ -123,7 +122,7 @@ int sr_session_device_clear(void)
  *
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments.
  */
-int sr_session_device_add(struct sr_device *device)
+SR_API int sr_session_device_add(struct sr_device *device)
 {
        int ret;
 
@@ -165,7 +164,7 @@ int sr_session_device_add(struct sr_device *device)
  *
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_datafeed_callback_clear(void)
+SR_API int sr_session_datafeed_callback_clear(void)
 {
        if (!session) {
                sr_err("session: %s: session was NULL", __func__);
@@ -184,7 +183,7 @@ int sr_session_datafeed_callback_clear(void)
  * @param callback TODO.
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_datafeed_callback_add(sr_datafeed_callback callback)
+SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback callback)
 {
        if (!session) {
                sr_err("session: %s: session was NULL", __func__);
@@ -258,7 +257,7 @@ static int sr_session_run_poll(void)
  *
  * @return SR_OK upon success, SR_ERR upon errors.
  */
-int sr_session_start(void)
+SR_API int sr_session_start(void)
 {
        struct sr_device *device;
        GSList *l;
@@ -304,7 +303,7 @@ int sr_session_start(void)
  *
  * @return SR_OK upon success, SR_ERR_BUG upon errors.
  */
-int sr_session_run(void)
+SR_API int sr_session_run(void)
 {
        if (!session) {
                sr_err("session: %s: session was NULL; a session must be "
@@ -342,7 +341,7 @@ int sr_session_run(void)
  *
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_halt(void)
+SR_API int sr_session_halt(void)
 {
        if (!session) {
                sr_err("session: %s: session was NULL", __func__);
@@ -362,7 +361,7 @@ int sr_session_halt(void)
  *
  * @return SR_OK upon success, SR_ERR_BUG if no session exists.
  */
-int sr_session_stop(void)
+SR_API int sr_session_stop(void)
 {
        struct sr_device *device;
        GSList *l;
@@ -439,7 +438,8 @@ static int datafeed_dump(struct sr_datafeed_packet *packet)
  * @param packet TODO.
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments.
  */
-int sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet)
+SR_API int sr_session_bus(struct sr_device *device,
+                         struct sr_datafeed_packet *packet)
 {
        GSList *l;
        sr_datafeed_callback cb;
@@ -487,8 +487,8 @@ int sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet)
  * @return SR_OK upon success, SR_ERR_ARG upon invalid arguments, or
  *         SR_ERR_MALLOC upon memory allocation errors.
  */
-int sr_session_source_add(int fd, int events, int timeout,
-               sr_receive_data_callback callback, void *user_data)
+SR_API int sr_session_source_add(int fd, int events, int timeout,
+               sr_receive_data_callback callback, void *user_data)
 {
        struct source *new_sources, *s;
 
@@ -537,7 +537,7 @@ int sr_session_source_add(int fd, int events, int timeout,
  *         SR_ERR_MALLOC upon memory allocation errors, SR_ERR_BUG upon
  *         internal errors.
  */
-int sr_session_source_remove(int fd)
+SR_API int sr_session_source_remove(int fd)
 {
        struct source *new_sources;
        int old, new;
index 184dd37597c58af524bd4113b30909398947c1e5..08de48c2001d996b5e1295430fcd28b9e8475ed1 100644 (file)
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
-#include "config.h"
 #include <string.h>
 #include <stdlib.h>
 #include <unistd.h>
 #include <zip.h>
 #include <glib.h>
 #include <glib/gstdio.h>
+#include "config.h"
 #include "sigrok.h"
 #include "sigrok-internal.h"
 
@@ -39,7 +39,7 @@ extern struct sr_device_plugin session_driver;
  *         SR_ERR_MALLOC upon memory allocation errors, or SR_ERR upon
  *         other errors.
  */
-int sr_session_load(const char *filename)
+SR_API int sr_session_load(const char *filename)
 {
        GKeyFile *kf;
        GPtrArray *capturefiles;
index 4ec9339c2900e90cc9866258af85d27455445f64..b5aea17b6a46dc63ea797ae6c873d185b77ecf8a 100644 (file)
@@ -22,6 +22,7 @@
 
 #include <stdarg.h>
 #include <glib.h>
+#include "config.h" /* Needed for HAVE_LIBUSB_1_0 and others. */
 #ifdef HAVE_LIBUSB_1_0
 #include <libusb.h>
 #endif
@@ -41,7 +42,7 @@
 
 /*--- hwplugin.c ------------------------------------------------------------*/
 
-int load_hwplugins(void);
+SR_PRIV int load_hwplugins(void);
 
 #ifdef HAVE_LIBUSB_1_0
 struct sr_usb_device_instance {
@@ -58,56 +59,58 @@ struct sr_serial_device_instance {
 
 #ifdef HAVE_LIBUSB_1_0
 /* USB-specific instances */
-struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
+SR_PRIV struct sr_usb_device_instance *sr_usb_device_instance_new(uint8_t bus,
                uint8_t address, struct libusb_device_handle *hdl);
-void sr_usb_device_instance_free(struct sr_usb_device_instance *usb);
+SR_PRIV void sr_usb_device_instance_free(struct sr_usb_device_instance *usb);
 #endif
 
 /* Serial-specific instances */
-struct sr_serial_device_instance *sr_serial_device_instance_new(
+SR_PRIV struct sr_serial_device_instance *sr_serial_device_instance_new(
                                        const char *port, int fd);
-void sr_serial_device_instance_free(struct sr_serial_device_instance *serial);
+SR_PRIV void sr_serial_device_instance_free(
+               struct sr_serial_device_instance *serial);
 
 /*--- log.c -----------------------------------------------------------------*/
 
-int sr_log(int loglevel, const char *format, ...);
-int sr_spew(const char *format, ...);
-int sr_dbg(const char *format, ...);
-int sr_info(const char *format, ...);
-int sr_warn(const char *format, ...);
-int sr_err(const char *format, ...);
+SR_PRIV int sr_log(int loglevel, const char *format, ...);
+SR_PRIV int sr_spew(const char *format, ...);
+SR_PRIV int sr_dbg(const char *format, ...);
+SR_PRIV int sr_info(const char *format, ...);
+SR_PRIV int sr_warn(const char *format, ...);
+SR_PRIV int sr_err(const char *format, ...);
 
 /*--- hardware/common/serial.c ----------------------------------------------*/
 
-GSList *list_serial_ports(void);
-int serial_open(const char *pathname, int flags);
-int serial_close(int fd);
-int serial_flush(int fd);
-int serial_write(int fd, const void *buf, size_t count);
-int serial_read(int fd, void *buf, size_t count);
-void *serial_backup_params(int fd);
-void serial_restore_params(int fd, void *backup);
-int serial_set_params(int fd, int speed, int bits, int parity, int stopbits,
-                     int flowcontrol);
+SR_PRIV GSList *list_serial_ports(void);
+SR_PRIV int serial_open(const char *pathname, int flags);
+SR_PRIV int serial_close(int fd);
+SR_PRIV int serial_flush(int fd);
+SR_PRIV int serial_write(int fd, const void *buf, size_t count);
+SR_PRIV int serial_read(int fd, void *buf, size_t count);
+SR_PRIV void *serial_backup_params(int fd);
+SR_PRIV void serial_restore_params(int fd, void *backup);
+SR_PRIV int serial_set_params(int fd, int speed, int bits, int parity,
+                             int stopbits, int flowcontrol);
 
 /*--- hardware/common/ezusb.c -----------------------------------------------*/
 
 #ifdef HAVE_LIBUSB_1_0
-int ezusb_reset(struct libusb_device_handle *hdl, int set_clear);
-int ezusb_install_firmware(libusb_device_handle *hdl, const char *filename);
-int ezusb_upload_firmware(libusb_device *dev, int configuration,
-                         const char *filename);
+SR_PRIV int ezusb_reset(struct libusb_device_handle *hdl, int set_clear);
+SR_PRIV int ezusb_install_firmware(libusb_device_handle *hdl,
+                                  const char *filename);
+SR_PRIV int ezusb_upload_firmware(libusb_device *dev, int configuration,
+                                 const char *filename);
 #endif
 
 /*--- hardware/common/misc.c ------------------------------------------------*/
 
 #ifdef HAVE_LIBUSB_1_0
-int opendev2(int device_index, struct sr_device_instance **sdi,
-            libusb_device *dev, struct libusb_device_descriptor *des,
-            int *skip, uint16_t vid, uint16_t pid, int interface);
-int opendev3(struct sr_device_instance **sdi, libusb_device *dev,
-            struct libusb_device_descriptor *des,
-            uint16_t vid, uint16_t pid, int interface);
+SR_PRIV int opendev2(int device_index, struct sr_device_instance **sdi,
+                    libusb_device *dev, struct libusb_device_descriptor *des,
+                    int *skip, uint16_t vid, uint16_t pid, int interface);
+SR_PRIV int opendev3(struct sr_device_instance **sdi, libusb_device *dev,
+                    struct libusb_device_descriptor *des,
+                    uint16_t vid, uint16_t pid, int interface);
 #endif
 
 #endif
index 2d32354cda417599ec196406990584621742ef70..5b883043febac8c85f0a203fb38b0b115979ad85 100644 (file)
 
 /*--- backend.c -------------------------------------------------------------*/
 
-int sr_init(void);
-int sr_exit(void);
+SR_API int sr_init(void);
+SR_API int sr_exit(void);
 
 /*--- log.c -----------------------------------------------------------------*/
 
-int sr_set_loglevel(int loglevel);
-int sr_get_loglevel(void);
+SR_API int sr_set_loglevel(int loglevel);
+SR_API int sr_get_loglevel(void);
 
 /*--- datastore.c -----------------------------------------------------------*/
 
-int sr_datastore_new(int unitsize, struct sr_datastore **ds);
-int sr_datastore_destroy(struct sr_datastore *ds);
-int sr_datastore_put(struct sr_datastore *ds, void *data, unsigned int length,
-                    int in_unitsize, int *probelist);
+SR_API int sr_datastore_new(int unitsize, struct sr_datastore **ds);
+SR_API int sr_datastore_destroy(struct sr_datastore *ds);
+SR_API int sr_datastore_put(struct sr_datastore *ds, void *data,
+                           unsigned int length, int in_unitsize,
+                           int *probelist);
 
 /*--- device.c --------------------------------------------------------------*/
 
-int sr_device_scan(void);
-GSList *sr_device_list(void);
-struct sr_device *sr_device_new(const struct sr_device_plugin *plugin,
-                               int plugin_index);
-int sr_device_clear(struct sr_device *device);
-int sr_device_probe_clear(struct sr_device *device, int probenum);
-int sr_device_probe_add(struct sr_device *device, const char *name);
-struct sr_probe *sr_device_probe_find(const struct sr_device *device,
-                                     int probenum);
-int sr_device_probe_name(struct sr_device *device, int probenum,
-                        const char *name);
-int sr_device_trigger_clear(struct sr_device *device);
-int sr_device_trigger_set(struct sr_device *device, int probenum,
-                         const char *trigger);
-gboolean sr_device_has_hwcap(const struct sr_device *device, int hwcap);
-int sr_device_get_info(const struct sr_device *device, int id,
-                                          const void **data);
+SR_API int sr_device_scan(void);
+SR_API GSList *sr_device_list(void);
+SR_API struct sr_device *sr_device_new(const struct sr_device_plugin *plugin,
+                                      int plugin_index);
+SR_API int sr_device_clear(struct sr_device *device);
+SR_API int sr_device_probe_clear(struct sr_device *device, int probenum);
+SR_API int sr_device_probe_add(struct sr_device *device, const char *name);
+SR_API struct sr_probe *sr_device_probe_find(const struct sr_device *device,
+                                            int probenum);
+SR_API int sr_device_probe_name(struct sr_device *device, int probenum,
+                               const char *name);
+SR_API int sr_device_trigger_clear(struct sr_device *device);
+SR_API int sr_device_trigger_set(struct sr_device *device, int probenum,
+                                const char *trigger);
+SR_API gboolean sr_device_has_hwcap(const struct sr_device *device, int hwcap);
+SR_API int sr_device_get_info(const struct sr_device *device, int id,
+                             const void **data);
 
 /*--- filter.c --------------------------------------------------------------*/
 
-int sr_filter_probes(int in_unitsize, int out_unitsize, const int *probelist,
-                    const unsigned char *data_in, uint64_t length_in,
-                    char **data_out, uint64_t *length_out);
+SR_API int sr_filter_probes(int in_unitsize, int out_unitsize,
+                           const int *probelist, const unsigned char *data_in,
+                           uint64_t length_in, char **data_out,
+                           uint64_t *length_out);
 
 /*--- hwplugin.c ------------------------------------------------------------*/
 
-GSList *sr_list_hwplugins(void);
-int sr_init_hwplugins(struct sr_device_plugin *plugin);
-void sr_cleanup_hwplugins(void);
+SR_API GSList *sr_list_hwplugins(void);
+SR_API int sr_init_hwplugins(struct sr_device_plugin *plugin);
+SR_API void sr_cleanup_hwplugins(void);
 
 /* Generic device instances */
-struct sr_device_instance *sr_device_instance_new(int index,
+SR_API struct sr_device_instance *sr_device_instance_new(int index,
        int status, const char *vendor, const char *model, const char *version);
-struct sr_device_instance *sr_get_device_instance(GSList *device_instances,
-                                                 int device_index);
-void sr_device_instance_free(struct sr_device_instance *sdi);
+SR_API struct sr_device_instance *sr_get_device_instance(
+                       GSList *device_instances, int device_index);
+SR_API void sr_device_instance_free(struct sr_device_instance *sdi);
 
-int sr_find_hwcap(int *capabilities, int hwcap);
-struct sr_hwcap_option *sr_find_hwcap_option(int hwcap);
-void sr_source_remove(int fd);
-void sr_source_add(int fd, int events, int timeout,
-                  sr_receive_data_callback rcv_cb, void *user_data);
+SR_API int sr_find_hwcap(int *capabilities, int hwcap);
+SR_API struct sr_hwcap_option *sr_find_hwcap_option(int hwcap);
+SR_API void sr_source_remove(int fd);
+SR_API void sr_source_add(int fd, int events, int timeout,
+                         sr_receive_data_callback rcv_cb, void *user_data);
 
 /*--- session.c -------------------------------------------------------------*/
 
@@ -88,43 +90,44 @@ typedef void (*sr_datafeed_callback) (struct sr_device *device,
                                      struct sr_datafeed_packet *packet);
 
 /* Session setup */
-int sr_session_load(const char *filename);
-struct sr_session *sr_session_new(void);
-int sr_session_destroy(void);
-int sr_session_device_clear(void);
-int sr_session_device_add(struct sr_device *device);
+SR_API int sr_session_load(const char *filename);
+SR_API struct sr_session *sr_session_new(void);
+SR_API int sr_session_destroy(void);
+SR_API int sr_session_device_clear(void);
+SR_API int sr_session_device_add(struct sr_device *device);
 
 /* Datafeed setup */
-int sr_session_datafeed_callback_clear(void);
-int sr_session_datafeed_callback_add(sr_datafeed_callback callback);
+SR_API int sr_session_datafeed_callback_clear(void);
+SR_API int sr_session_datafeed_callback_add(sr_datafeed_callback callback);
 
 /* Session control */
-int sr_session_start(void);
-int sr_session_run(void);
-int sr_session_halt(void);
-int sr_session_stop(void);
-int sr_session_bus(struct sr_device *device, struct sr_datafeed_packet *packet);
-int sr_session_save(const char *filename);
-int sr_session_source_add(int fd, int events, int timeout,
-               sr_receive_data_callback callback, void *user_data);
-int sr_session_source_remove(int fd);
+SR_API int sr_session_start(void);
+SR_API int sr_session_run(void);
+SR_API int sr_session_halt(void);
+SR_API int sr_session_stop(void);
+SR_API int sr_session_bus(struct sr_device *device,
+                         struct sr_datafeed_packet *packet);
+SR_API int sr_session_save(const char *filename);
+SR_API int sr_session_source_add(int fd, int events, int timeout,
+               sr_receive_data_callback callback, void *user_data);
+SR_API int sr_session_source_remove(int fd);
 
 /*--- input/input.c ---------------------------------------------------------*/
 
-struct sr_input_format **sr_input_list(void);
+SR_API struct sr_input_format **sr_input_list(void);
 
 /*--- output/output.c -------------------------------------------------------*/
 
-struct sr_output_format **sr_output_list(void);
+SR_API struct sr_output_format **sr_output_list(void);
 
 /*--- output/common.c -------------------------------------------------------*/
 
-char *sr_samplerate_string(uint64_t samplerate);
-char *sr_period_string(uint64_t frequency);
-char **sr_parse_triggerstring(struct sr_device *device,
-                             const char *triggerstring);
-int sr_parse_sizestring(const char *sizestring, uint64_t *size);
-uint64_t sr_parse_timestring(const char *timestring);
-gboolean sr_parse_boolstring(const char *boolstring);
+SR_API char *sr_samplerate_string(uint64_t samplerate);
+SR_API char *sr_period_string(uint64_t frequency);
+SR_API char **sr_parse_triggerstring(struct sr_device *device,
+                                    const char *triggerstring);
+SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size);
+SR_API uint64_t sr_parse_timestring(const char *timestring);
+SR_API gboolean sr_parse_boolstring(const char *boolstring);
 
 #endif
index 511f8afb3704bcec80aa7e317a3b600adbd7d628..0b585c4e67b74e038dcfbd8d2226bfd4f39af872 100644 (file)
@@ -73,6 +73,25 @@ extern "C" {
 #define SR_LOG_DBG      4
 #define SR_LOG_SPEW     5
 
+/*
+ * Use SR_API to mark public API symbols, and SR_PRIV for private symbols.
+ *
+ * Variables and functions marked 'static' are private already and don't
+ * need SR_PRIV. However, functions which are not static (because they need
+ * to be used in other libsigrok-internal files) but are also not meant to
+ * be part of the public libsigrok API, must use SR_PRIV.
+ *
+ * This uses the 'visibility' feature of gcc (requires gcc >= 4.0).
+ *
+ * Details: http://gcc.gnu.org/wiki/Visibility
+ */
+
+/* Marks public libsigrok API symbols. */
+#define SR_API __attribute__((visibility("default")))
+
+/* Marks private, non-public libsigrok symbols (not part of the API). */
+#define SR_PRIV __attribute__((visibility("hidden")))
+
 typedef int (*sr_receive_data_callback) (int fd, int revents, void *user_data);
 
 /* Data types used by hardware plugins for set_configuration() */
index cd2ab449ec75967bcdc1fe4a72e83a6d3952125d..ea77f4d90429f1de7fbf4bf6a76035441e8dcf59 100644 (file)
--- a/strutil.c
+++ b/strutil.c
@@ -33,7 +33,7 @@
  * @return A malloc()ed string representation of the samplerate value,
  *         or NULL upon errors. The caller is responsible to free() the memory.
  */
-char *sr_samplerate_string(uint64_t samplerate)
+SR_API char *sr_samplerate_string(uint64_t samplerate)
 {
        char *o;
        int r;
@@ -70,7 +70,7 @@ char *sr_samplerate_string(uint64_t samplerate)
  * @return A malloc()ed string representation of the frequency value,
  *         or NULL upon errors. The caller is responsible to free() the memory.
  */
-char *sr_period_string(uint64_t frequency)
+SR_API char *sr_period_string(uint64_t frequency)
 {
        char *o;
        int r;
@@ -104,8 +104,8 @@ char *sr_period_string(uint64_t frequency)
  * @param triggerstring TODO
  * @return TODO
  */
-char **sr_parse_triggerstring(struct sr_device *device,
-                             const char *triggerstring)
+SR_API char **sr_parse_triggerstring(struct sr_device *device,
+                                    const char *triggerstring)
 {
        GSList *l;
        struct sr_probe *probe;
@@ -189,7 +189,7 @@ char **sr_parse_triggerstring(struct sr_device *device,
  * @return SR_OK or error code
  *
  */
-int sr_parse_sizestring(const char *sizestring, uint64_t *size)
+SR_API int sr_parse_sizestring(const char *sizestring, uint64_t *size)
 {
        int multiplier, done;
        char *s;
@@ -247,7 +247,7 @@ int sr_parse_sizestring(const char *sizestring, uint64_t *size)
  * TODO: picoseconds?
  * TODO: Allow both lower-case and upper-case.
  */
-uint64_t sr_parse_timestring(const char *timestring)
+SR_API uint64_t sr_parse_timestring(const char *timestring)
 {
        uint64_t time_msec;
        char *s;
@@ -270,15 +270,15 @@ uint64_t sr_parse_timestring(const char *timestring)
        return time_msec;
 }
 
-gboolean sr_parse_boolstring(const char *boolstr)
+SR_API gboolean sr_parse_boolstring(const char *boolstr)
 {
        if (!boolstr)
                return FALSE;
 
-       if (!g_strcasecmp(boolstr, "true") || 
+       if (!g_strcasecmp(boolstr, "true") ||
            !g_strcasecmp(boolstr, "yes") ||
            !g_strcasecmp(boolstr, "on") ||
-           !g_strcasecmp(boolstr, "1")) 
+           !g_strcasecmp(boolstr, "1"))
                return TRUE;
 
        return FALSE;