Import ncpfs 2.2.1
This commit is contained in:
54
include/private/asm-generic/atomic.h
Normal file
54
include/private/asm-generic/atomic.h
Normal file
@@ -0,0 +1,54 @@
|
||||
#ifndef __PRIVATE_LIBNCP_GENERIC_ATOMIC_H__
|
||||
#define __PRIVATE_LIBNCP_GENERIC_ATOMIC_H__
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "private/libncp-lock.h"
|
||||
|
||||
typedef struct {
|
||||
int counter;
|
||||
ncpt_mutex_t mutex;
|
||||
} ncpt_atomic_t;
|
||||
|
||||
#define NCPT_ATOMIC_INIT(i) { (i), NCPT_MUTEX_INITIALIZER }
|
||||
|
||||
static inline int ncpt_atomic_read(ncpt_atomic_t* v) {
|
||||
int tmp;
|
||||
|
||||
ncpt_mutex_lock(&v->mutex);
|
||||
tmp = v->counter;
|
||||
ncpt_mutex_unlock(&v->mutex);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
static inline int ncpt_atomic_set(ncpt_atomic_t* v, int i) {
|
||||
v->counter = i;
|
||||
ncpt_mutex_init(&v->mutex);
|
||||
return i;
|
||||
}
|
||||
|
||||
static inline void ncpt_atomic_add(int i, ncpt_atomic_t* v) {
|
||||
ncpt_mutex_lock(&v->mutex);
|
||||
v->counter += i;
|
||||
ncpt_mutex_unlock(&v->mutex);
|
||||
}
|
||||
|
||||
static inline void ncpt_atomic_sub(int i, ncpt_atomic_t* v) {
|
||||
ncpt_mutex_lock(&v->mutex);
|
||||
v->counter -= i;
|
||||
ncpt_mutex_unlock(&v->mutex);
|
||||
}
|
||||
|
||||
#define ncpt_atomic_inc(v) ncpt_atomic_add(1,v)
|
||||
#define ncpt_atomic_dec(v) ncpt_atomic_sub(1,v)
|
||||
|
||||
static inline int ncpt_atomic_dec_and_test(ncpt_atomic_t* v) {
|
||||
int tmp;
|
||||
|
||||
ncpt_mutex_lock(&v->mutex);
|
||||
tmp = !(--v->counter);
|
||||
ncpt_mutex_unlock(&v->mutex);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
#endif /* __PRIVATE_LIBNCP_GENERIC_ATOMIC_H__ */
|
||||
Reference in New Issue
Block a user