}
- krb5_error_code smb_krb5_init_context(void *parent_ctx,
+_PUBLIC_ krb5_error_code smb_krb5_init_context(void *parent_ctx,
struct smb_krb5_context **smb_krb5_context)
{
krb5_error_code ret;
/**
re-initialize iconv conversion descriptors
**/
-void init_iconv(void)
+_PUBLIC_ void init_iconv(void)
{
charset_t c1, c2;
for (c1=0;c1<NUM_CHARSETS;c1++) {
* @param destlen maximal length allowed for string
* @returns the number of bytes occupied in the destination
**/
-ssize_t convert_string(charset_t from, charset_t to,
+_PUBLIC_ ssize_t convert_string(charset_t from, charset_t to,
void const *src, size_t srclen,
void *dest, size_t destlen)
{
* @returns Size in bytes of the converted string; or -1 in case of error.
**/
-ssize_t convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
+_PUBLIC_ ssize_t convert_string_talloc(TALLOC_CTX *ctx, charset_t from, charset_t to,
void const *src, size_t srclen, void **dest)
{
size_t i_len, o_len, destlen;
* @param dest_len the maximum length in bytes allowed in the
* destination. If @p dest_len is -1 then no maximum is used.
**/
-ssize_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
+_PUBLIC_ ssize_t push_ascii(void *dest, const char *src, size_t dest_len, int flags)
{
size_t src_len;
ssize_t ret;
* @returns The number of bytes occupied by the string in the destination
* or -1 in case of error.
**/
-ssize_t push_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
+_PUBLIC_ ssize_t push_ascii_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
{
size_t src_len = strlen(src)+1;
* @param src_len is the length of the source area in bytes.
* @returns the number of bytes occupied by the string in @p src.
**/
-ssize_t pull_ascii(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
+_PUBLIC_ ssize_t pull_ascii(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
{
size_t ret;
* @param dest_len is the maximum length allowed in the
* destination. If dest_len is -1 then no maxiumum is used.
**/
-ssize_t push_ucs2(void *dest, const char *src, size_t dest_len, int flags)
+_PUBLIC_ ssize_t push_ucs2(void *dest, const char *src, size_t dest_len, int flags)
{
size_t len=0;
size_t src_len = strlen(src);
* @returns The number of bytes occupied by the string in the destination
* or -1 in case of error.
**/
-ssize_t push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src)
+_PUBLIC_ ssize_t push_ucs2_talloc(TALLOC_CTX *ctx, void **dest, const char *src)
{
size_t src_len = strlen(src)+1;
*dest = NULL;
* @returns The number of bytes occupied by the string in the destination
**/
-ssize_t push_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
+_PUBLIC_ ssize_t push_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
{
size_t src_len = strlen(src)+1;
The resulting string in "dest" is always null terminated.
**/
-size_t pull_ucs2(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
+_PUBLIC_ size_t pull_ucs2(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
{
size_t ret;
* @returns The number of bytes occupied by the string in the destination
**/
-ssize_t pull_ucs2_talloc(TALLOC_CTX *ctx, char **dest, const void *src)
+_PUBLIC_ ssize_t pull_ucs2_talloc(TALLOC_CTX *ctx, char **dest, const void *src)
{
size_t src_len = utf16_len(src);
*dest = NULL;
* @returns The number of bytes occupied by the string in the destination
**/
-ssize_t pull_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
+_PUBLIC_ ssize_t pull_utf8_talloc(TALLOC_CTX *ctx, char **dest, const char *src)
{
size_t src_len = strlen(src)+1;
*dest = NULL;
is -1 then no maxiumum is used.
**/
-ssize_t push_string(void *dest, const char *src, size_t dest_len, int flags)
+_PUBLIC_ ssize_t push_string(void *dest, const char *src, size_t dest_len, int flags)
{
if (flags & STR_ASCII) {
return push_ascii(dest, src, dest_len, flags);
The resulting string in "dest" is always null terminated.
**/
-ssize_t pull_string(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
+_PUBLIC_ ssize_t pull_string(char *dest, const void *src, size_t dest_len, size_t src_len, int flags)
{
if (flags & STR_ASCII) {
return pull_ascii(dest, src, dest_len, src_len, flags);
return INVALID_CODEPOINT if the next character cannot be converted
*/
-codepoint_t next_codepoint(const char *str, size_t *size)
+_PUBLIC_ codepoint_t next_codepoint(const char *str, size_t *size)
{
/* it cannot occupy more than 4 bytes in UTF16 format */
uint8_t buf[4];
return the number of bytes occupied by the CH_UNIX character, or
-1 on failure
*/
-ssize_t push_codepoint(char *str, codepoint_t c)
+_PUBLIC_ ssize_t push_codepoint(char *str, codepoint_t c)
{
smb_iconv_t descriptor;
uint8_t buf[4];
/***********************************************************************
the rfc 2104 version of hmac_md5 initialisation.
***********************************************************************/
-void hmac_md5_init_rfc2104(const uint8_t *key, int key_len, HMACMD5Context *ctx)
+_PUBLIC_ void hmac_md5_init_rfc2104(const uint8_t *key, int key_len, HMACMD5Context *ctx)
{
int i;
/***********************************************************************
the microsoft version of hmac_md5 initialisation.
***********************************************************************/
-void hmac_md5_init_limK_to_64(const uint8_t *key, int key_len,
+_PUBLIC_ void hmac_md5_init_limK_to_64(const uint8_t *key, int key_len,
HMACMD5Context *ctx)
{
/* if key is longer than 64 bytes truncate it */
/***********************************************************************
update hmac_md5 "inner" buffer
***********************************************************************/
-void hmac_md5_update(const uint8_t *text, int text_len, HMACMD5Context *ctx)
+_PUBLIC_ void hmac_md5_update(const uint8_t *text, int text_len, HMACMD5Context *ctx)
{
MD5Update(&ctx->ctx, text, text_len); /* then text of datagram */
}
/***********************************************************************
finish off hmac_md5 "inner" buffer and generate outer one.
***********************************************************************/
-void hmac_md5_final(uint8_t *digest, HMACMD5Context *ctx)
+_PUBLIC_ void hmac_md5_final(uint8_t *digest, HMACMD5Context *ctx)
{
struct MD5Context ctx_o;
single function to calculate an HMAC MD5 digest from data.
use the microsoft hmacmd5 init method because the key is 16 bytes.
************************************************************/
-void hmac_md5(const uint8_t key[16], const uint8_t *data, int data_len, uint8_t *digest)
+_PUBLIC_ void hmac_md5(const uint8_t key[16], const uint8_t *data, int data_len, uint8_t *digest)
{
HMACMD5Context ctx;
hmac_md5_init_limK_to_64(key, 16, &ctx);
out[3] = (x>>24)&0xFF;
}
-/* produce a md4 message digest from data of length n bytes */
-void mdfour(uint8_t *out, const uint8_t *in, int n)
+/**
+ * produce a md4 message digest from data of length n bytes
+ */
+_PUBLIC_ void mdfour(uint8_t *out, const uint8_t *in, int n)
{
uint8_t buf[128];
uint32_t M[16];
/*
do a single event loop using the events defined in ev
*/
-int event_loop_once(struct event_context *ev)
+_PUBLIC_ int event_loop_once(struct event_context *ev)
{
return ev->ops->loop_once(ev);
}
/*
unload the interfaces list, so it can be reloaded when needed
*/
-void unload_interfaces(void)
+_PUBLIC_ void unload_interfaces(void)
{
talloc_free(local_interfaces);
local_interfaces = NULL;
/****************************************************************************
how many interfaces do we have
**************************************************************************/
-int iface_count(void)
+_PUBLIC_ int iface_count(void)
{
int ret = 0;
struct interface *i;
/****************************************************************************
return IP of the Nth interface
**************************************************************************/
-const char *iface_n_ip(int n)
+_PUBLIC_ const char *iface_n_ip(int n)
{
struct interface *i;
/****************************************************************************
return bcast of the Nth interface
**************************************************************************/
-const char *iface_n_bcast(int n)
+_PUBLIC_ const char *iface_n_bcast(int n)
{
struct interface *i;
/****************************************************************************
return netmask of the Nth interface
**************************************************************************/
-const char *iface_n_netmask(int n)
+_PUBLIC_ const char *iface_n_netmask(int n)
{
struct interface *i;
return the local IP address that best matches a destination IP, or
our first interface if none match
*/
-const char *iface_best_ip(const char *dest)
+_PUBLIC_ const char *iface_best_ip(const char *dest)
{
struct interface *iface;
struct in_addr ip;
/*
return True if an IP is one one of our local networks
*/
-BOOL iface_is_local(const char *dest)
+_PUBLIC_ BOOL iface_is_local(const char *dest)
{
struct in_addr ip;
/*
return True if a IP matches a IP/netmask pair
*/
-BOOL iface_same_net(const char *ip1, const char *ip2, const char *netmask)
+_PUBLIC_ BOOL iface_same_net(const char *ip1, const char *ip2, const char *netmask)
{
return same_net(interpret_addr2(ip1),
interpret_addr2(ip2),
argument this is needed */
static struct substitute_context *sub;
-void sub_set_context(struct substitute_context *subptr)
+_PUBLIC_ void sub_set_context(struct substitute_context *subptr)
{
sub = subptr;
}
(*dest) = s;
}
-void sub_set_remote_proto(const char *str)
+_PUBLIC_ void sub_set_remote_proto(const char *str)
{
if (!sub) return;
setup_string(&sub->remote_proto, str);
}
-void sub_set_remote_arch(const char *str)
+_PUBLIC_ void sub_set_remote_arch(const char *str)
{
if (!sub) return;
setup_string(&sub->remote_arch, str);
/**
setup the string used by %U substitution
*/
-void sub_set_user_name(const char *name)
+_PUBLIC_ void sub_set_user_name(const char *name)
{
if (!sub) return;
setup_string(&sub->user_name, name);
/**
FIXME
**/
-void standard_sub_basic(char *str,size_t len)
+_PUBLIC_ void standard_sub_basic(char *str,size_t len)
{
}
Do some standard substitutions in a string.
This function will return an allocated string that have to be freed.
**/
-char *talloc_sub_basic(TALLOC_CTX *mem_ctx, const char *smb_name, const char *str)
+_PUBLIC_ char *talloc_sub_basic(TALLOC_CTX *mem_ctx, const char *smb_name, const char *str)
{
return talloc_strdup(mem_ctx, str);
}
-char *alloc_sub_basic(const char *smb_name, const char *str)
+_PUBLIC_ char *alloc_sub_basic(const char *smb_name, const char *str)
{
return strdup(str);
}
This function will return an allocated string that have to be freed.
**/
-char *talloc_sub_specified(TALLOC_CTX *mem_ctx,
+_PUBLIC_ char *talloc_sub_specified(TALLOC_CTX *mem_ctx,
const char *input_string,
const char *username,
const char *domain,
return talloc_strdup(mem_ctx, input_string);
}
-char *alloc_sub_specified(const char *input_string,
+_PUBLIC_ char *alloc_sub_specified(const char *input_string,
const char *username,
const char *domain,
uid_t uid,
return strdup(input_string);
}
-char *talloc_sub_advanced(TALLOC_CTX *mem_ctx,
+_PUBLIC_ char *talloc_sub_advanced(TALLOC_CTX *mem_ctx,
int snum,
const char *user,
const char *connectpath,
return talloc_strdup(mem_ctx, str);
}
-char *alloc_sub_advanced(int snum, const char *user,
+_PUBLIC_ char *alloc_sub_advanced(int snum, const char *user,
const char *connectpath, gid_t gid,
const char *smb_name, char *str)
{
Do some standard substitutions in a string.
**/
-void standard_sub_tcon(struct smbsrv_tcon *tcon, char *str, size_t len)
+_PUBLIC_ void standard_sub_tcon(struct smbsrv_tcon *tcon, char *str, size_t len)
{
}
-char *talloc_sub_tcon(TALLOC_CTX *mem_ctx, struct smbsrv_tcon *tcon, char *str)
+_PUBLIC_ char *talloc_sub_tcon(TALLOC_CTX *mem_ctx, struct smbsrv_tcon *tcon, char *str)
{
return talloc_strdup(mem_ctx, str);
}
-char *alloc_sub_tcon(struct smbsrv_tcon *tcon, char *str)
+_PUBLIC_ char *alloc_sub_tcon(struct smbsrv_tcon *tcon, char *str)
{
return strdup(str);
}
Like standard_sub but by snum. FIXME
**/
-void standard_sub_snum(int snum, char *str, size_t len)
+_PUBLIC_ void standard_sub_snum(int snum, char *str, size_t len)
{
}
apparent reason.
****************************************************************************/
-struct hostent *sys_gethostbyname(const char *name)
+_PUBLIC_ struct hostent *sys_gethostbyname(const char *name)
{
#ifdef REDUCE_ROOT_DNS_LOOKUPS
char query[256], hostname[256];
#endif /* REDUCE_ROOT_DNS_LOOKUPS */
}
-const char *sys_inet_ntoa(struct ipv4_addr in)
+_PUBLIC_ const char *sys_inet_ntoa(struct ipv4_addr in)
{
struct in_addr in2;
in2.s_addr = in.addr;
return inet_ntoa(in2);
}
-struct ipv4_addr sys_inet_makeaddr(int net, int host)
+_PUBLIC_ struct ipv4_addr sys_inet_makeaddr(int net, int host)
{
struct in_addr in;
struct ipv4_addr in2;
#include "includes.h"
#include "libcli/nbt/libnbt.h"
#include "lib/socket/socket.h"
-/*
+
+/**
send a nbt name query
*/
-struct nbt_name_request *nbt_name_query_send(struct nbt_name_socket *nbtsock,
+_PUBLIC_ struct nbt_name_request *nbt_name_query_send(struct nbt_name_socket *nbtsock,
struct nbt_name_query *io)
{
struct nbt_name_request *req;
return NULL;
}
-/*
+/**
wait for a name query reply
*/
-NTSTATUS nbt_name_query_recv(struct nbt_name_request *req,
+_PUBLIC_ NTSTATUS nbt_name_query_recv(struct nbt_name_request *req,
TALLOC_CTX *mem_ctx, struct nbt_name_query *io)
{
NTSTATUS status;
return NT_STATUS_OK;
}
-/*
+/**
wait for a name query reply
*/
-NTSTATUS nbt_name_query(struct nbt_name_socket *nbtsock,
+_PUBLIC_ NTSTATUS nbt_name_query(struct nbt_name_socket *nbtsock,
TALLOC_CTX *mem_ctx, struct nbt_name_query *io)
{
struct nbt_name_request *req = nbt_name_query_send(nbtsock, io);
}
-/*
+/**
send a nbt name status
*/
-struct nbt_name_request *nbt_name_status_send(struct nbt_name_socket *nbtsock,
+_PUBLIC_ struct nbt_name_request *nbt_name_status_send(struct nbt_name_socket *nbtsock,
struct nbt_name_status *io)
{
struct nbt_name_request *req;
return NULL;
}
-/*
+/**
wait for a name status reply
*/
-NTSTATUS nbt_name_status_recv(struct nbt_name_request *req,
+_PUBLIC_ NTSTATUS nbt_name_status_recv(struct nbt_name_request *req,
TALLOC_CTX *mem_ctx, struct nbt_name_status *io)
{
NTSTATUS status;
return NT_STATUS_OK;
}
-/*
+/**
wait for a name status reply
*/
-NTSTATUS nbt_name_status(struct nbt_name_socket *nbtsock,
+_PUBLIC_ NTSTATUS nbt_name_status(struct nbt_name_socket *nbtsock,
TALLOC_CTX *mem_ctx, struct nbt_name_status *io)
{
struct nbt_name_request *req = nbt_name_status_send(nbtsock, io);
#include "includes.h"
#include "system/network.h"
-void ndr_print_ipv4_addr(struct ndr_print *ndr, const char *name, const struct ipv4_addr *_ip)
+_PUBLIC_ void ndr_print_ipv4_addr(struct ndr_print *ndr, const char *name, const struct ipv4_addr *_ip)
{
struct ipv4_addr ip;
ndr->print(ndr, "%-25s: %s", name, sys_inet_ntoa(ip));
}
-/*
+/**
build a GUID from a string
*/
-NTSTATUS GUID_from_string(const char *s, struct GUID *guid)
+_PUBLIC_ NTSTATUS GUID_from_string(const char *s, struct GUID *guid)
{
NTSTATUS status = NT_STATUS_INVALID_PARAMETER;
uint32_t time_low;
return NT_STATUS_OK;
}
-/* generate a random GUID */
+/**
+ * generate a random GUID
+ */
struct GUID GUID_random(void)
{
struct GUID guid;
return guid;
}
-/* generate a random GUID */
-struct GUID GUID_zero(void)
+/**
+ * generate an empty GUID
+ */
+_PUBLIC_ struct GUID GUID_zero(void)
{
struct GUID guid;
return guid;
}
-BOOL GUID_all_zero(const struct GUID *u)
+_PUBLIC_ BOOL GUID_all_zero(const struct GUID *u)
{
if (u->time_low != 0 ||
u->time_mid != 0 ||
return True;
}
-BOOL GUID_equal(const struct GUID *u1, const struct GUID *u2)
+_PUBLIC_ BOOL GUID_equal(const struct GUID *u1, const struct GUID *u2)
{
if (u1->time_low != u2->time_low ||
u1->time_mid != u2->time_mid ||
return True;
}
-/*
+/**
its useful to be able to display these in debugging messages
*/
-char *GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
+_PUBLIC_ char *GUID_string(TALLOC_CTX *mem_ctx, const struct GUID *guid)
{
return talloc_asprintf(mem_ctx,
"%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
guid->node[4], guid->node[5]);
}
-char *GUID_string2(TALLOC_CTX *mem_ctx, const struct GUID *guid)
+_PUBLIC_ char *GUID_string2(TALLOC_CTX *mem_ctx, const struct GUID *guid)
{
char *ret, *s = GUID_string(mem_ctx, guid);
ret = talloc_asprintf(mem_ctx, "{%s}", s);
return ret;
}
-
-void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid)
+_PUBLIC_ void ndr_print_GUID(struct ndr_print *ndr, const char *name, const struct GUID *guid)
{
ndr->print(ndr, "%-25s: %s", name, GUID_string(ndr, guid));
}
-BOOL policy_handle_empty(struct policy_handle *h)
+_PUBLIC_ BOOL policy_handle_empty(struct policy_handle *h)
{
return (h->handle_type == 0 && GUID_all_zero(&h->uuid));
}
#include "includes.h"
-/*
+/**
pull a general string from the wire
*/
-NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
+_PUBLIC_ NTSTATUS ndr_pull_string(struct ndr_pull *ndr, int ndr_flags, const char **s)
{
char *as=NULL;
uint32_t len1, ofs, len2;
}
-/*
+/**
push a general string onto the wire
*/
-NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
+_PUBLIC_ NTSTATUS ndr_push_string(struct ndr_push *ndr, int ndr_flags, const char *s)
{
ssize_t s_len, c_len, d_len;
int ret;
return NT_STATUS_OK;
}
-/*
+/**
push a general string onto the wire
*/
-size_t ndr_string_array_size(struct ndr_push *ndr, const char *s)
+_PUBLIC_ size_t ndr_string_array_size(struct ndr_push *ndr, const char *s)
{
size_t c_len;
unsigned flags = ndr->flags;
return c_len;
}
-void ndr_print_string(struct ndr_print *ndr, const char *name, const char *s)
+_PUBLIC_ void ndr_print_string(struct ndr_print *ndr, const char *name, const char *s)
{
if (s) {
ndr->print(ndr, "%-25s: '%s'", name, s);
}
}
-uint32_t ndr_size_string(int ret, const char * const* string, int flags)
+_PUBLIC_ uint32_t ndr_size_string(int ret, const char * const* string, int flags)
{
/* FIXME: Is this correct for all strings ? */
if(!(*string)) return ret;
return ret+strlen(*string)+1;
}
-/*
+/**
pull a general string array from the wire
*/
-NTSTATUS ndr_pull_string_array(struct ndr_pull *ndr, int ndr_flags, const char ***_a)
+_PUBLIC_ NTSTATUS ndr_pull_string_array(struct ndr_pull *ndr, int ndr_flags, const char ***_a)
{
const char **a = *_a;
uint32_t count;
return NT_STATUS_OK;
}
-/*
+/**
push a general string array onto the wire
*/
-NTSTATUS ndr_push_string_array(struct ndr_push *ndr, int ndr_flags, const char **a)
+_PUBLIC_ NTSTATUS ndr_push_string_array(struct ndr_push *ndr, int ndr_flags, const char **a)
{
uint32_t count;
return NT_STATUS_OK;
}
-void ndr_print_string_array(struct ndr_print *ndr, const char *name, const char **a)
+_PUBLIC_ void ndr_print_string_array(struct ndr_print *ndr, const char *name, const char **a)
{
uint32_t count;
uint32_t i;
ndr->depth--;
}
-/* Return number of elements in a string including the last (zeroed) element */
-uint32_t ndr_string_length(const void *_var, uint32_t element_size)
+/**
+ * Return number of elements in a string including the last (zeroed) element
+ */
+_PUBLIC_ uint32_t ndr_string_length(const void *_var, uint32_t element_size)
{
uint32_t i;
uint8_t zero[4] = {0,0,0,0};
return i+1;
}
-NTSTATUS ndr_check_string_terminator(struct ndr_pull *ndr, uint32_t count, uint32_t element_size)
+_PUBLIC_ NTSTATUS ndr_check_string_terminator(struct ndr_pull *ndr, uint32_t count, uint32_t element_size)
{
uint32_t i;
struct ndr_pull_save save_offset;
return NT_STATUS_OK;
}
-NTSTATUS ndr_pull_charset(struct ndr_pull *ndr, int ndr_flags, const char **var, uint32_t length, uint8_t byte_mul, int chset)
+_PUBLIC_ NTSTATUS ndr_pull_charset(struct ndr_pull *ndr, int ndr_flags, const char **var, uint32_t length, uint8_t byte_mul, int chset)
{
int ret;
if (length == 0) {
return NT_STATUS_OK;
}
-NTSTATUS ndr_push_charset(struct ndr_push *ndr, int ndr_flags, const char *var, uint32_t length, uint8_t byte_mul, int chset)
+_PUBLIC_ NTSTATUS ndr_push_charset(struct ndr_push *ndr, int ndr_flags, const char *var, uint32_t length, uint8_t byte_mul, int chset)
{
ssize_t ret, required;
}
/* Return number of elements in a string in the specified charset */
-uint32_t ndr_charset_length(const void *var, int chset)
+_PUBLIC_ uint32_t ndr_charset_length(const void *var, int chset)
{
/* FIXME: Treat special chars special here, taking chset into account */
/* Also include 0 byte */
if (has_property($fn, "public")) {
pidl_hdr "$decl;";
- pidl "$decl";
+ pidl "_PUBLIC_ $decl";
} else {
pidl "static $decl";
}
my $args = $typefamily{$e->{DATA}->{TYPE}}->{DECL}->($e,"print");
- pidl "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
+ pidl "_PUBLIC_ void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args)";
pidl_hdr "void ndr_print_$e->{NAME}(struct ndr_print *ndr, const char *name, $args);";
pidl "{";
indent;
return if has_property($fn, "noprint");
- pidl "void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r)";
+ pidl "_PUBLIC_ void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r)";
pidl_hdr "void ndr_print_$fn->{NAME}(struct ndr_print *ndr, const char *name, int flags, const struct $fn->{NAME} *r);";
pidl "{";
indent;