aboutsummaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorThomas Touhey <thomas@touhey.fr>2019-04-25 12:57:14 +0200
committerThomas Touhey <thomas@touhey.fr>2019-04-25 12:57:14 +0200
commit4dd0d638a993aadca4a8920b5b9d198e00534f06 (patch)
tree3e2c99b0b629edbd83e0393d36a5fec6915aed16 /include
parent2974766ae3e6eb176529563f09d7e34d7835047b (diff)
Modified cdefs macros for functions and data
Diffstat (limited to 'include')
-rw-r--r--include/libtio.h6
-rw-r--r--include/libtio/cdefs.h26
-rw-r--r--include/libtio/error.h4
-rw-r--r--include/libtio/iter.h14
-rw-r--r--include/libtio/log.h12
-rw-r--r--include/libtio/native.h14
-rw-r--r--include/libtio/stream.h118
7 files changed, 101 insertions, 93 deletions
diff --git a/include/libtio.h b/include/libtio.h
index efd7a94..1d0708b 100644
--- a/include/libtio.h
+++ b/include/libtio.h
@@ -10,12 +10,12 @@
/* Define what is required to use the library facilities. */
-TIO_EXTERN int TIO_EXPORT tio_check_version
+TIO_EXTERN(int) tio_check_version
OF((unsigned long version));
-TIO_EXTERN int TIO_EXPORT tio_init
+TIO_EXTERN(int) tio_init
OF((void));
-TIO_EXTERN void TIO_EXPORT tio_exit
+TIO_EXTERN(void) tio_exit
OF((void));
# define TIO_INIT \
diff --git a/include/libtio/cdefs.h b/include/libtio/cdefs.h
index a4a1854..bba459a 100644
--- a/include/libtio/cdefs.h
+++ b/include/libtio/cdefs.h
@@ -63,9 +63,19 @@
/* Some platforms require more than simply 'extern'.
* Here are macros to control this. */
-# define TIO_EXTERN extern
-# define TIO_EXPORT
-# define TIO_LOCAL static
+# define TIO_EXTERN(TYPE) \
+ extern TYPE
+# define TIO_NORETURN \
+ __attribute__((noreturn)) extern void
+# define TIO_LOCAL(TYPE) \
+ static TYPE
+# define TIO_HOOK(TYPE) \
+ static TYPE
+# define TIO_HOOK_TYPE(TYPE) \
+ TYPE
+
+# define TIO_LOCAL_DATA(TYPE) \
+ static TYPE
/* Also, libtio is made in C, so we might as well define what we want
* for C++. */
@@ -82,6 +92,12 @@
# define TIO_END_NAMESPACE
# endif
+/* Forward declare a structure. */
+
+# define TIO_STRUCT(STRUCT_NAME, STRUCT_TYPEDEF) \
+struct STRUCT_NAME; \
+typedef struct STRUCT_NAME STRUCT_TYPEDEF;
+
/* ---
* Native platform support.
* --- */
@@ -110,9 +126,9 @@ TIO_BEGIN_DECLS
/* Memory allocation utilities. */
-TIO_EXTERN void *TIO_EXPORT tio_alloc
+TIO_EXTERN(void *) tio_alloc
OF((size_t tio__count, size_t tio__size));
-TIO_EXTERN void TIO_EXPORT tio_free
+TIO_EXTERN(void) tio_free
OF((void *tio__mem));
TIO_END_DECLS
diff --git a/include/libtio/error.h b/include/libtio/error.h
index cca471b..6d6a63d 100644
--- a/include/libtio/error.h
+++ b/include/libtio/error.h
@@ -53,9 +53,9 @@ typedef int tio_error_t;
/* Get the error name or description. */
-TIO_EXTERN char const *TIO_EXPORT tio_error_name
+TIO_EXTERN(char const *) tio_error_name
OF((int tio__code));
-TIO_EXTERN char const *TIO_EXPORT tio_error_desc
+TIO_EXTERN(char const *) tio_error_desc
OF((int tio__code));
TIO_END_NAMESPACE
diff --git a/include/libtio/iter.h b/include/libtio/iter.h
index 7a4bdd5..89d3f0c 100644
--- a/include/libtio/iter.h
+++ b/include/libtio/iter.h
@@ -28,11 +28,11 @@ typedef struct tio_iter_functions tio_iter_functions_t;
* When `tio_end()` is called, the `tio_end_t` callback, if not NULL,
* will be called. */
-typedef int TIO_EXPORT tio_next_t
+typedef TIO_HOOK_TYPE(int) tio_next_t
OF((void *tio__cookie, void **tio__ptr));
-typedef void TIO_EXPORT tio_nextfree_t
+typedef TIO_HOOK_TYPE(void) tio_nextfree_t
OF((void *tio__cookie, void *tio__ptr));
-typedef void TIO_EXPORT tio_end_t
+typedef TIO_HOOK_TYPE(void) tio_end_t
OF((void *tio__cookie));
struct tio_iter_functions {
@@ -58,21 +58,21 @@ TIO_BEGIN_DECLS
* element might be free'd or re-used, so if you are interested in what is
* in it, copy the data before using one of the previous functions. */
-TIO_EXTERN int TIO_EXPORT tio_iter
+TIO_EXTERN(int) tio_iter
OF((tio_iter_t **tio__iterp, void *tio__cookie,
tio_iter_functions_t const *tio__funcs));
-TIO_EXTERN int TIO_EXPORT tio_next
+TIO_EXTERN(int) tio_next
OF((tio_iter_t *tio__iter, void **tio__ptr));
-TIO_EXTERN void TIO_EXPORT tio_end
+TIO_EXTERN(void) tio_end
OF((tio_iter_t *tio__iter));
/* You can make a “super iterator” that makes an iterator out of two
* iterators! It will empty the first one, then the second one.
* It will also take care of closing them. */
-TIO_EXTERN int TIO_EXPORT tio_combine_iterators
+TIO_EXTERN(int) tio_combine_iterators
OF((tio_iter_t **tio__iterp,
tio_iter_t *tio__first,
tio_iter_t *tio__second));
diff --git a/include/libtio/log.h b/include/libtio/log.h
index fb18e07..2882566 100644
--- a/include/libtio/log.h
+++ b/include/libtio/log.h
@@ -8,23 +8,23 @@ TIO_BEGIN_DECLS
/* Get and set the log level at runtime. */
-TIO_EXTERN void TIO_EXPORT tio_setlog
+TIO_EXTERN(void) tio_setlog
OF((char const *tio__level));
-TIO_EXTERN char const *TIO_EXPORT tio_getlog
+TIO_EXTERN(char const *) tio_getlog
OF((void));
/* List log levels (deprecated interface) */
-typedef void tio_log_list_t OF((void *tio__cookie,
- char const *tio__str));
+typedef TIO_HOOK_TYPE(void) tio_log_list_t
+ OF((void *tio__cookie, char const *tio__str));
-TIO_EXTERN TIO_DEPRECATED void TIO_EXPORT tio_listlog
+TIO_DEPRECATED TIO_EXTERN(void) tio_listlog
OF((tio_log_list_t *tio__callback, void *tio__cookie));
/* List log levels (new interface).
* This iterator yields strings (`const char *`). */
-TIO_EXTERN int TIO_EXPORT tio_iter_log
+TIO_EXTERN(int) tio_iter_log
OF((tio_iter_t **tio__iter));
# define tio_next_log(ITER, PTRP) (tio_next((ITER), (void **)(PTRP)))
diff --git a/include/libtio/native.h b/include/libtio/native.h
index 84aae12..0b7e899 100644
--- a/include/libtio/native.h
+++ b/include/libtio/native.h
@@ -10,7 +10,7 @@ TIO_BEGIN_DECLS
# if !defined(LIBTIO_DISABLED_UNIX)
-TIO_EXTERN int TIO_EXPORT tio_open_unix_fd
+TIO_EXTERN(int) tio_open_unix_fd
OF((tio_stream_t **tio__streamp, int tio__fd, int tio__close));
# endif
@@ -20,9 +20,9 @@ TIO_EXTERN int TIO_EXPORT tio_open_unix_fd
# ifndef LIBTIO_DISABLED_LIBUSB
# include <libusb.h>
-TIO_EXTERN int TIO_EXPORT tio_open_libusb
+TIO_EXTERN(int) tio_open_libusb
OF((tio_stream_t **streamp, int bus, int addr));
-TIO_EXTERN int TIO_EXPORT tio_open_libusb_device
+TIO_EXTERN(int) tio_open_libusb_device
OF((tio_stream_t **streamp, libusb_device_handle *handle));
# endif
@@ -32,15 +32,15 @@ TIO_EXTERN int TIO_EXPORT tio_open_libusb_device
# ifndef LIBTIO_DISABLED_FILE
# include <stdio.h>
-TIO_EXTERN int TIO_EXPORT tio_open_std
+TIO_EXTERN(int) tio_open_std
OF((tio_stream_t **tio__stream,
FILE *tio__fl, int tio__close));
-TIO_EXTERN int TIO_EXPORT tio_open_stdout
+TIO_EXTERN(int) tio_open_stdout
OF((tio_stream_t **tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_open_stderr
+TIO_EXTERN(int) tio_open_stderr
OF((tio_stream_t **tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_open_stdin
+TIO_EXTERN(int) tio_open_stdin
OF((tio_stream_t **tio__stream));
# endif
diff --git a/include/libtio/stream.h b/include/libtio/stream.h
index d58fd41..aec0e4f 100644
--- a/include/libtio/stream.h
+++ b/include/libtio/stream.h
@@ -13,24 +13,16 @@ TIO_BEGIN_NAMESPACE
* written, but not all of it), you shall return an error, because there
* is no partial success. */
-struct tio_stream;
-typedef struct tio_stream tio_stream_t;
-struct tio_timeouts;
-typedef struct tio_timeouts tio_timeouts_t;
-
-struct tio_serial_attrs;
-typedef struct tio_serial_attrs tio_serial_attrs_t;
-struct tio_scsi_request;
-typedef struct tio_scsi_request tio_scsi_request_t;
-
-struct tio_functions;
-typedef struct tio_functions tio_functions_t;
-struct tio_serial_functions;
-typedef struct tio_serial_functions tio_serial_functions_t;
-struct tio_usb_functions;
-typedef struct tio_usb_functions tio_usb_functions_t;
-struct tio_scsi_functions;
-typedef struct tio_scsi_functions tio_scsi_functions_t;
+TIO_STRUCT(tio_stream, tio_stream_t)
+TIO_STRUCT(tio_timeouts, tio_timeouts_t)
+
+TIO_STRUCT(tio_serial_attrs, tio_serial_attrs_t)
+TIO_STRUCT(tio_scsi_request, tio_scsi_request_t)
+
+TIO_STRUCT(tio_functions, tio_functions_t)
+TIO_STRUCT(tio_serial_functions, tio_serial_functions_t)
+TIO_STRUCT(tio_usb_functions, tio_usb_functions_t)
+TIO_STRUCT(tio_scsi_functions, tio_scsi_functions_t)
/* Timeouts. */
@@ -291,39 +283,39 @@ struct tio_scsi_request {
* (some are common to several types of stream). All the structures have
* the `close` callback first. */
-typedef void tio_close_t
+typedef TIO_HOOK_TYPE(void) tio_close_t
OF((void *));
-typedef int tio_read_t
+typedef TIO_HOOK_TYPE(int) tio_read_t
OF((void *, unsigned char *, size_t));
-typedef int tio_read_tm_t
+typedef TIO_HOOK_TYPE(int) tio_read_tm_t
OF((void *, unsigned char *, size_t,
tio_timeouts_t const *));
-typedef int tio_write_t
+typedef TIO_HOOK_TYPE(int) tio_write_t
OF((void *, unsigned char const *, size_t));
-typedef int tio_write_tm_t
+typedef TIO_HOOK_TYPE(int) tio_write_tm_t
OF((void *, unsigned char const *, size_t,
tio_timeouts_t const *));
-typedef int tio_set_tm_t
+typedef TIO_HOOK_TYPE(int) tio_set_tm_t
OF((void *,
tio_timeouts_t const * /* read */,
tio_timeouts_t const * /* write */));
-typedef int tio_seek_t
+typedef TIO_HOOK_TYPE(int) tio_seek_t
OF((void *, tio_off_t *, tio_whence_t));
-typedef int tio_set_serial_attrs_t
+typedef TIO_HOOK_TYPE(int) tio_set_serial_attrs_t
OF((void *, tio_serial_attrs_t const *));
-typedef int tio_scsi_t
+typedef TIO_HOOK_TYPE(int) tio_scsi_t
OF((void *, tio_scsi_request_t *));
-typedef int tio_usb_send_bulk_t
+typedef TIO_HOOK_TYPE(int) tio_usb_send_bulk_t
OF((void *, unsigned char const *, size_t,
unsigned int /* total timeout in ms */));
-typedef int tio_usb_recv_bulk_t
+typedef TIO_HOOK_TYPE(int) tio_usb_recv_bulk_t
OF((void *, unsigned char *, size_t,
unsigned int /* total timeout in ms */));
@@ -376,7 +368,7 @@ TIO_BEGIN_DECLS
/* Default stream serial settings utilities. */
-TIO_EXTERN int TIO_EXPORT tio_make_serial_attrs
+TIO_EXTERN(int) tio_make_serial_attrs
OF((tio_serial_attrs_t *tio__attrs, char const *tio__raw));
/* Open and close a stream.
@@ -387,37 +379,37 @@ TIO_EXTERN int TIO_EXPORT tio_make_serial_attrs
* `tio__over` stream if present, so that you can still access USB
* functions behind an SCSI stream for example. */
-TIO_EXTERN int TIO_EXPORT tio_open
+TIO_EXTERN(int) tio_open
OF((tio_stream_t **tio__streamp, tio_stream_t *tio__parent,
void *tio__cookie, unsigned int tio__flags,
tio_functions_t const *tio__functions, tio_off_t tio__offset));
-TIO_EXTERN int TIO_EXPORT tio_open_serial
+TIO_EXTERN(int) tio_open_serial
OF((tio_stream_t **tio__streamp, tio_stream_t *tio__parent,
void *tio__cookie, unsigned int tio__flags,
tio_serial_functions_t const *tio__functions,
tio_serial_attrs_t const *tio__attrs));
-TIO_EXTERN int TIO_EXPORT tio_open_usb
+TIO_EXTERN(int) tio_open_usb
OF((tio_stream_t **tio__streamp, tio_stream_t *tio__parent,
void *tio__cookie, unsigned int tio__flags,
tio_usb_functions_t const *tio__functions));
-TIO_EXTERN int TIO_EXPORT tio_open_scsi
+TIO_EXTERN(int) tio_open_scsi
OF((tio_stream_t **tio__streamp, tio_stream_t *tio__parent,
void *tio__cookie, unsigned int tio__flags,
tio_scsi_functions_t const *tio__functions));
-TIO_EXTERN void TIO_EXPORT tio_close
+TIO_EXTERN(void) tio_close
OF((tio_stream_t *tio__stream));
/* Get various stream data. */
-TIO_EXTERN int TIO_EXPORT tio_isreadable
+TIO_EXTERN(int) tio_isreadable
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_iswritable
+TIO_EXTERN(int) tio_iswritable
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_isseekable
+TIO_EXTERN(int) tio_isseekable
OF((tio_stream_t *tio__stream));
# define tio_is_readable(TIO__STREAM) \
@@ -427,81 +419,81 @@ TIO_EXTERN int TIO_EXPORT tio_isseekable
# define tio_is_seekable(TIO__STREAM) \
tio_isseekable(TIO__STREAM)
-TIO_EXTERN int TIO_EXPORT tio_has_read_timeouts
+TIO_EXTERN(int) tio_has_read_timeouts
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_has_write_timeouts
+TIO_EXTERN(int) tio_has_write_timeouts
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_get_type
+TIO_EXTERN(int) tio_get_type
OF((tio_stream_t *tio__stream));
-TIO_EXTERN void *TIO_EXPORT tio_get_cookie
+TIO_EXTERN(void *) tio_get_cookie
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_get_lasterr
+TIO_EXTERN(int) tio_get_lasterr
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_get_parent
+TIO_EXTERN(int) tio_get_parent
OF((tio_stream_t *tio__stream, tio_stream_t **tio__parent));
/* Read and write data from and to a stream.
* Timeouts are in milliseconds (ms). */
-TIO_EXTERN int TIO_EXPORT tio_read
+TIO_EXTERN(int) tio_read
OF((tio_stream_t *tio__stream, void *tio__dest,
size_t tio__count));
-TIO_EXTERN int TIO_EXPORT tio_read_tm
+TIO_EXTERN(int) tio_read_tm
OF((tio_stream_t *tio__stream, void *tio__dest,
size_t tio__count, tio_timeouts_t const *tio__tm));
-TIO_EXTERN int TIO_EXPORT tio_write
+TIO_EXTERN(int) tio_write
OF((tio_stream_t *tio__stream, void const *tio__data,
size_t tio__count));
-TIO_EXTERN int TIO_EXPORT tio_write_tm
+TIO_EXTERN(int) tio_write_tm
OF((tio_stream_t *tio__stream, void const *tio__data,
size_t tio__count, tio_timeouts_t const *tio__tm));
-TIO_EXTERN int TIO_EXPORT tio_write_char
+TIO_EXTERN(int) tio_write_char
OF((tio_stream_t *tio__stream, int tio__char));
/* Move within a stream. */
-TIO_EXTERN int TIO_EXPORT tio_seek
+TIO_EXTERN(int) tio_seek
OF((tio_stream_t *tio__stream,
tio_off_t tio__offset, tio_whence_t tio__whence));
-TIO_EXTERN tio_off_t TIO_EXPORT tio_tell
+TIO_EXTERN(tio_off_t) tio_tell
OF((tio_stream_t *tio__stream));
-TIO_EXTERN int TIO_EXPORT tio_skip
+TIO_EXTERN(int) tio_skip
OF((tio_stream_t *tio__stream, tio_off_t tio__size));
-TIO_EXTERN int TIO_EXPORT tio_get_size
+TIO_EXTERN(int) tio_get_size
OF((tio_stream_t *tio__stream, tio_off_t *tio__size));
/* Set and get the serial attributes of a stream. */
-TIO_EXTERN int TIO_EXPORT tio_set_serial_attrs
+TIO_EXTERN(int) tio_set_serial_attrs
OF((tio_stream_t *tio__stream, unsigned int tio__flags,
tio_serial_attrs_t const *tio__attrs));
-TIO_EXTERN int TIO_EXPORT tio_get_serial_attrs
+TIO_EXTERN(int) tio_get_serial_attrs
OF((tio_stream_t *tio__stream, unsigned int tio__flags,
tio_serial_attrs_t *tio__attrs));
/* Set the timeouts of a stream. */
-TIO_EXTERN int TIO_EXPORT tio_set_timeouts
+TIO_EXTERN(int) tio_set_timeouts
OF((tio_stream_t *tio__stream,
tio_timeouts_t const *tio__read,
tio_timeouts_t const *tio__write));
/* Make USB-related operations. */
-TIO_EXTERN int TIO_EXPORT tio_usb_send_bulk
+TIO_EXTERN(int) tio_usb_send_bulk
OF((tio_stream_t *tio__stream, unsigned char const *tio__data,
size_t tio__size, unsigned int tio__timeout));
-TIO_EXTERN int TIO_EXPORT tio_usb_recv_bulk
+TIO_EXTERN(int) tio_usb_recv_bulk
OF((tio_stream_t *tio__stream, unsigned char *tio__buf,
size_t tio__size, unsigned int tio__timeout));
/* Make an SCSI request. */
-TIO_EXTERN int TIO_EXPORT tio_scsi_request
+TIO_EXTERN(int) tio_scsi_request
OF((tio_stream_t *tio__stream, tio_scsi_request_t *tio__request));
/* ---
@@ -510,19 +502,19 @@ TIO_EXTERN int TIO_EXPORT tio_scsi_request
/* Make a stream out of memory. */
-TIO_EXTERN int TIO_EXPORT tio_open_memory
+TIO_EXTERN(int) tio_open_memory
OF((tio_stream_t **tio__stream,
void *tio__zone, size_t tio__size));
-TIO_EXTERN int TIO_EXPORT tio_open_readonly_memory
+TIO_EXTERN(int) tio_open_readonly_memory
OF((tio_stream_t **tio__stream,
void const *tio__zone, size_t tio__size));
/* Make a stream out of another, with a limit (and empty it). */
-TIO_EXTERN int TIO_EXPORT tio_open_limited
+TIO_EXTERN(int) tio_open_limited
OF((tio_stream_t **tio__stream,
tio_stream_t *tio__original, size_t tio__limit));
-TIO_EXTERN int TIO_EXPORT tio_empty_limited
+TIO_EXTERN(int) tio_empty_limited
OF((tio_stream_t *tio__stream));
TIO_END_DECLS