Skip to content

Commit

Permalink
prepend function attributes for portability
Browse files Browse the repository at this point in the history
prepend function attributes for portability, e.g. for __declspec()
  • Loading branch information
gstrauss committed May 21, 2015
1 parent 997070a commit 767926d
Show file tree
Hide file tree
Showing 27 changed files with 524 additions and 358 deletions.
4 changes: 3 additions & 1 deletion contrib/ruby-mcdb/mcdbrb.c
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,9 @@ static ID mcdbrb_id_each;
if (__builtin_expect( ((void *)m->map == MAP_FAILED), 0)) \
rb_raise(rb_eRuntimeError, "closed MCDB file");

static void * __attribute_noinline__ __attribute_cold__
__attribute_cold__
__attribute_noinline__
static void *
mcdbrb_raise_error(const VALUE obj)
{ /*(one of these should raise an exception if this routine is called)*/
Check_Type(obj, T_DATA);
Expand Down
10 changes: 6 additions & 4 deletions mcdb.c
Original file line number Diff line number Diff line change
Expand Up @@ -293,11 +293,13 @@ mcdb_iter_init(struct mcdb_iter * const restrict iter,
*/


static void inline
mcdb_mmap_unmap(struct mcdb_mmap * const restrict map)
__attribute_nonnull__;
__attribute_nonnull__
inline
static void
mcdb_mmap_unmap(struct mcdb_mmap * const restrict map);

static void inline
inline
static void
mcdb_mmap_unmap(struct mcdb_mmap * const restrict map)
{
if (map->ptr)
Expand Down
105 changes: 64 additions & 41 deletions mcdb.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,35 +82,45 @@ struct mcdb {
void *vp; /* user-provided extension data */
};

__attribute_hot__
__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_findtagstart(struct mcdb * restrict, const char * restrict, size_t,
unsigned char)/* note: must be 0 or cast to (unsigned char) */
__attribute_nonnull__ __attribute_warn_unused_result__ __attribute_hot__
__attribute_nothrow__;
unsigned char);/* note: must be 0 or cast to (unsigned char)*/

__attribute_hot__
__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_findtagnext(struct mcdb * restrict, const char * restrict, size_t,
unsigned char) /* note: must be 0 or cast to (unsigned char) */
__attribute_nonnull__ __attribute_warn_unused_result__ __attribute_hot__
__attribute_nothrow__;
unsigned char); /* note: must be 0 or cast to (unsigned char)*/

#define mcdb_findstart(m,key,klen) mcdb_findtagstart((m),(key),(klen),0)
#define mcdb_findnext(m,key,klen) mcdb_findtagnext((m),(key),(klen),0)
#define mcdb_find(m,key,klen) \
(__builtin_expect((mcdb_findstart((m),(key),(klen))), 1) \
&& mcdb_findnext((m),(key),(klen)))

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern void *
mcdb_read(const struct mcdb * restrict, uintptr_t, uint32_t, void * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_read(const struct mcdb * restrict, uintptr_t, uint32_t, void * restrict);

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern uint32_t
mcdb_numrecs(struct mcdb * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_numrecs(struct mcdb * restrict);

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_validate_slots(struct mcdb * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_validate_slots(struct mcdb * restrict);

/* (macros valid only after mcdb_find() or mcdb_find*next() returns true) */
#define mcdb_datapos(m) ((m)->dpos)
Expand All @@ -134,22 +144,26 @@ struct mcdb_iter {
#define mcdb_iter_keylen(iter) ((iter)->klen)
#define mcdb_iter_keyptr(iter) ((iter)->ptr-(iter)->dlen-(iter)->klen)

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_iter(struct mcdb_iter * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_iter(struct mcdb_iter * restrict);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_iter_init(struct mcdb_iter * restrict, struct mcdb * restrict)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_iter_init(struct mcdb_iter * restrict, struct mcdb * restrict);

__attribute_malloc__
__attribute_nonnull_x__((3,4,5))
__attribute_warn_unused_result__
EXPORT extern struct mcdb_mmap *
mcdb_mmap_create(struct mcdb_mmap * restrict,
const char *,const char *,void * (*)(size_t),void (*)(void *))
__attribute_nonnull_x__((3,4,5)) __attribute_warn_unused_result__;
const char *,const char *,void * (*)(size_t),void (*)(void *));

EXPORT extern void
mcdb_mmap_destroy(struct mcdb_mmap * restrict)
;
mcdb_mmap_destroy(struct mcdb_mmap * restrict);
/* check if constant db has been updated and refresh mmap
* (for use with mcdb mmaps held open for any period of time)
* (i.e. for any use other than mcdb_mmap_create(), query, mcdb_mmap_destroy())
Expand All @@ -164,24 +178,31 @@ mcdb_mmap_destroy(struct mcdb_mmap * restrict)
(__builtin_expect(!mcdb_mmap_refresh_check(*(mapptr)), true) \
|| __builtin_expect(mcdb_mmap_reopen_threadsafe(mapptr), true))

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_mmap_init(struct mcdb_mmap * restrict, int)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_mmap_init(struct mcdb_mmap * restrict, int);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_mmap_prefault(const struct mcdb_mmap * restrict)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_mmap_prefault(const struct mcdb_mmap * restrict);

EXPORT extern void
mcdb_mmap_free(struct mcdb_mmap * restrict)
;
mcdb_mmap_free(struct mcdb_mmap * restrict);

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_mmap_reopen(struct mcdb_mmap * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_mmap_reopen(struct mcdb_mmap * restrict);

__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_mmap_refresh_check(const struct mcdb_mmap * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_mmap_refresh_check(const struct mcdb_mmap * restrict);


enum mcdb_flags {
Expand All @@ -190,12 +211,14 @@ enum mcdb_flags {
MCDB_REGISTER_ALREADY_LOCKED = 2
};

__attribute_nonnull__
EXPORT extern struct mcdb_mmap *
mcdb_mmap_thread_registration(struct mcdb_mmap ** restrict, int)
__attribute_nonnull__;
mcdb_mmap_thread_registration(struct mcdb_mmap ** restrict, int);

__attribute_nonnull__
__attribute_warn_unused_result__
EXPORT extern bool
mcdb_mmap_reopen_threadsafe(struct mcdb_mmap ** restrict)
__attribute_nonnull__ __attribute_warn_unused_result__;
mcdb_mmap_reopen_threadsafe(struct mcdb_mmap ** restrict);


#define mcdb_thread_register(mcdb) \
Expand Down
8 changes: 5 additions & 3 deletions mcdb_error.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,12 @@ enum {
MCDB_ERROR_USAGE = -5
};

__attribute_cold__
__attribute_nonnull__
__attribute_nothrow__
__attribute_warn_unused_result__
extern int
mcdb_error (int, const char * restrict, const char * restrict)
__attribute_nonnull__ __attribute_cold__ __attribute_warn_unused_result__
__attribute_nothrow__;
mcdb_error (int, const char * restrict, const char * restrict);

#ifdef __cplusplus
}
Expand Down
26 changes: 17 additions & 9 deletions mcdb_make.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,8 @@ struct mcdb_hplist {

/* routine marked to indicate unlikely branch;
* __attribute_cold__ can be used instead of __builtin_expect() */
__attribute_noinline__ __attribute_cold__
__attribute_cold__
__attribute_noinline__
static int
mcdb_make_err(struct mcdb_make * const restrict m, int errnum)
{
Expand All @@ -100,9 +101,11 @@ mcdb_make_err(struct mcdb_make * const restrict m, int errnum)
}

__attribute_noinline__
__attribute_nonnull__
__attribute_warn_unused_result__
static bool
mcdb_hplist_alloc(struct mcdb_make * const restrict m)
__attribute_nonnull__ __attribute_warn_unused_result__;
mcdb_hplist_alloc(struct mcdb_make * const restrict m);

static bool
mcdb_hplist_alloc(struct mcdb_make * const restrict m)
{
Expand Down Expand Up @@ -148,9 +151,10 @@ mcdb_hplist_alloc(struct mcdb_make * const restrict m)
#endif
#include <sys/statvfs.h>
__attribute_noinline__
__attribute_warn_unused_result__
static int
mcdb_make_fallocate(const int fd, off_t offset, off_t len)
__attribute_warn_unused_result__;
mcdb_make_fallocate(const int fd, off_t offset, off_t len);

static int
mcdb_make_fallocate(const int fd, off_t offset, off_t len)
{
Expand Down Expand Up @@ -212,10 +216,12 @@ mcdb_make_fallocate(const int fd, off_t offset, off_t len)
}
#endif

__attribute_nonnull__
__attribute_warn_unused_result__
static bool inline
mcdb_mmap_commit(struct mcdb_make * const restrict m,
char header[MCDB_HEADER_SZ])
__attribute_nonnull__ __attribute_warn_unused_result__;
char header[MCDB_HEADER_SZ]);

static bool inline
mcdb_mmap_commit(struct mcdb_make * const restrict m,
char header[MCDB_HEADER_SZ])
Expand Down Expand Up @@ -247,10 +253,12 @@ mcdb_mmap_commit(struct mcdb_make * const restrict m,
}

__attribute_noinline__
__attribute_nonnull__
__attribute_warn_unused_result__
static bool
mcdb_mmap_upsize(struct mcdb_make * const restrict m, const size_t sz,
const bool sequential)
__attribute_nonnull__ __attribute_warn_unused_result__;
const bool sequential);

__attribute_noinline__
static bool
mcdb_mmap_upsize(struct mcdb_make * const restrict m, const size_t sz,
Expand Down
51 changes: 33 additions & 18 deletions mcdb_make.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,38 +67,53 @@ struct mcdb_make {
*/


__attribute_nonnull__
__attribute_warn_unused_result__
EXPORT extern int
mcdb_make_start(struct mcdb_make * restrict, int,
void * (*)(size_t), void (*)(void *))
__attribute_nonnull__ __attribute_warn_unused_result__;
void * (*)(size_t), void (*)(void *));

__attribute_nonnull__
__attribute_warn_unused_result__
EXPORT extern int
mcdb_make_add(struct mcdb_make * restrict,
const char * restrict, size_t,
const char * restrict, size_t)
__attribute_nonnull__ __attribute_warn_unused_result__;
const char * restrict, size_t);

__attribute_nonnull__
__attribute_warn_unused_result__
EXPORT extern int
mcdb_make_finish(struct mcdb_make * restrict)
__attribute_nonnull__ __attribute_warn_unused_result__;
mcdb_make_finish(struct mcdb_make * restrict);

__attribute_nonnull__
EXPORT extern int
mcdb_make_destroy(struct mcdb_make * restrict)
__attribute_nonnull__;
mcdb_make_destroy(struct mcdb_make * restrict);

/* support for adding entries from input stream, instead of fully in memory */
__attribute_nonnull__
__attribute_warn_unused_result__
EXPORT extern int
mcdb_make_addbegin(struct mcdb_make * restrict, size_t, size_t)
__attribute_nonnull__ __attribute_warn_unused_result__;
mcdb_make_addbegin(struct mcdb_make * restrict, size_t, size_t);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_make_addbuf_key(struct mcdb_make * restrict,const char * restrict,size_t)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_make_addbuf_key(struct mcdb_make * restrict,const char * restrict,size_t);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_make_addbuf_data(struct mcdb_make * restrict,const char * restrict,size_t)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_make_addbuf_data(struct mcdb_make * restrict,const char * restrict,size_t);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_make_addend(struct mcdb_make * restrict)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_make_addend(struct mcdb_make * restrict);

__attribute_nonnull__
__attribute_nothrow__
EXPORT extern void
mcdb_make_addrevert(struct mcdb_make * restrict)
__attribute_nonnull__ __attribute_nothrow__;
mcdb_make_addrevert(struct mcdb_make * restrict);


/* alias symbols with hidden visibility for use in DSO linking static mcdb.o
Expand Down
Loading

0 comments on commit 767926d

Please sign in to comment.