free(ctx);
 }
 
-int canl_create_io_handler(canl_ctx cc, canl_io_handler *io)
+canl_err_code
+canl_create_io_handler(canl_ctx cc, canl_io_handler *io)
 {
     io_handler *new_io_h = NULL;
     glb_ctx *g_cc = cc;
     return 0;
 }
 
-int canl_io_connect(canl_ctx cc, canl_io_handler io, const char *host, const char *service,
+canl_err_code
+canl_io_connect(canl_ctx cc, canl_io_handler io, const char *host, const char *service,
        int port, gss_OID_set auth_mechs,
         int flags, struct timeval *timeout)
 {
 }
 
 /*TODO select + timeout, EINTR!!! */ 
-int canl_io_accept(canl_ctx cc, canl_io_handler io, int new_fd,
+canl_err_code
+canl_io_accept(canl_ctx cc, canl_io_handler io, int new_fd,
         struct sockaddr s_addr, int flags, canl_principal *peer,
         struct timeval *timeout)
 {
 }
 
 /* close connection, preserve some info for the future reuse */
-int canl_io_close(canl_ctx cc, canl_io_handler io)
+canl_err_code
+canl_io_close(canl_ctx cc, canl_io_handler io)
 {
     io_handler *io_cc = (io_handler*) io;
     glb_ctx *glb_cc = (glb_ctx*) cc;
 }
 
 
-int canl_io_destroy(canl_ctx cc, canl_io_handler io)
+canl_err_code
+canl_io_destroy(canl_ctx cc, canl_io_handler io)
 {
     int err = 0;
     glb_ctx *glb_cc = (glb_ctx*) cc;
 
 
 #include <canl_err.h>
 
+#ifndef CANL_CALLCONV
+#define CANL_CALLCONV
+#endif
+
 typedef void *canl_io_handler;
 typedef void *canl_ctx;
 typedef void *canl_principal;
 
-canl_ctx canl_create_ctx();
-void canl_free_ctx(canl_ctx cc);
-int canl_create_io_handler(canl_ctx, canl_io_handler*);
+typedef long canl_err_code;
+
+canl_ctx CANL_CALLCONV
+canl_create_ctx();
+
+void CANL_CALLCONV
+canl_free_ctx(canl_ctx cc);
+
+canl_err_code CANL_CALLCONV
+canl_create_io_handler(canl_ctx cc, canl_io_handler*);
+
+canl_err_code CANL_CALLCONV
+canl_io_connect(canl_ctx cc, canl_io_handler io, const char *host, const char *service,
+                int port, gss_OID_set auth_mechs, int flags, struct timeval *timeout);
+
+canl_err_code CANL_CALLCONV
+canl_io_accept(canl_ctx cc, canl_io_handler io, int fd, struct sockaddr s_addr,
+               int flags, canl_principal *peer, struct timeval *timeout);
 
-int canl_io_connect(canl_ctx cc, canl_io_handler io, const char *host, const char *service,
-        int port, gss_OID_set auth_mechs, int flags, struct timeval *timeout);
-int canl_io_accept(canl_ctx cc, canl_io_handler io, int fd,
-        struct sockaddr s_addr, int flags, canl_principal *peer,
-        struct timeval *timeout);
-size_t canl_io_read(canl_ctx cc, canl_io_handler io, void *buffer, size_t size, struct timeval *timeout);
-size_t canl_io_write(canl_ctx cc, canl_io_handler io, void *buffer, size_t size, struct timeval *timeout);
+size_t CANL_CALLCONV
+canl_io_read(canl_ctx cc, canl_io_handler io, void *buffer,
+            size_t size, struct timeval *timeout);
 
-long
+size_t CANL_CALLCONV
+canl_io_write(canl_ctx cc, canl_io_handler io, void *buffer,
+             size_t size, struct timeval *timeout);
+
+canl_err_code CANL_CALLCONV
 canl_get_error_code(canl_ctx cc);
 
-char *
+char * CANL_CALLCONV
 canl_get_error_message(canl_ctx);
 
-int canl_get_error(canl_ctx cc, char ** reason);
-int canl_io_close(canl_ctx cc, canl_io_handler io);
-int canl_io_destroy(canl_ctx cc, canl_io_handler io);
+canl_err_code CANL_CALLCONV
+canl_get_error(canl_ctx cc, char ** reason);
+
+canl_err_code CANL_CALLCONV
+canl_io_close(canl_ctx cc, canl_io_handler io);
+
+canl_err_code CANL_CALLCONV
+canl_io_destroy(canl_ctx cc, canl_io_handler io);
+
+canl_err_code CANL_CALLCONV
+canl_princ_name(canl_ctx, const canl_principal, char **);
+
+canl_err_code CANL_CALLCONV
+canl_princ_mech(canl_ctx, const canl_principal, gss_OID *);
+
+char * CANL_CALLCONV
+canl_mech2str(canl_ctx, gss_OID);
 
-int canl_princ_name(canl_ctx, const canl_principal, char **);
-int canl_princ_mech(canl_ctx, const canl_principal, gss_OID *);
-char * canl_mech2str(canl_ctx, gss_OID);
-const gss_OID canl_str2mech(canl_ctx, const char mech);
+const gss_OID CANL_CALLCONV
+canl_str2mech(canl_ctx, const char mech);
 
 #ifdef __cplusplus
 }