aboutsummaryrefslogtreecommitdiff
path: root/ubifs-utils/common/defs.h
blob: ac46d83942b477c9df78cc925026b01bd0e2eaec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
/*
 * Greate deal of the code was taken from the kernel UBIFS implementation, and
 * this file contains some "glue" definitions.
 */

#ifndef __UBIFS_DEFS_H__
#define __UBIFS_DEFS_H__

#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <limits.h>
#include <errno.h>
#include <time.h>
#include <assert.h>
#include <execinfo.h>

#include "linux_types.h"
#include "ubifs.h"

/* common.h requires the PROGRAM_NAME macro */
extern struct ubifs_info info_;
#define PROGRAM_NAME (info_.program_name)
#include "common.h"

#define MKFS_PROGRAM_NAME "mkfs.ubifs"

enum { MKFS_PROGRAM_TYPE = 0 };

enum { ERR_LEVEL = 1, WARN_LEVEL, INFO_LEVEL, DEBUG_LEVEL };

enum {
	DUMP_PREFIX_NONE,
	DUMP_PREFIX_ADDRESS,
	DUMP_PREFIX_OFFSET
};

#define pr_debug(fmt, ...) do { if (info_.debug_level >= DEBUG_LEVEL)	\
	printf("<DEBUG> %s[%d] (%s): %s: " fmt, PROGRAM_NAME, getpid(),	\
	       info_.dev_name, __FUNCTION__, ##__VA_ARGS__);		\
} while(0)

#define pr_notice(fmt, ...) do { if (info_.debug_level >= INFO_LEVEL)	\
	printf("<INFO> %s[%d] (%s): %s: " fmt, PROGRAM_NAME, getpid(),	\
	       info_.dev_name, __FUNCTION__, ##__VA_ARGS__);		\
} while(0)

#define pr_warn(fmt, ...) do { if (info_.debug_level >= WARN_LEVEL)	\
	printf("<WARN> %s[%d] (%s): %s: " fmt, PROGRAM_NAME, getpid(),	\
	       info_.dev_name, __FUNCTION__, ##__VA_ARGS__);		\
} while(0)

#define pr_err(fmt, ...) do { if (info_.debug_level >= ERR_LEVEL)	\
	printf("<ERROR> %s[%d] (%s): %s: " fmt, PROGRAM_NAME, getpid(),	\
	       info_.dev_name, __FUNCTION__, ##__VA_ARGS__);		\
} while(0)

#define pr_cont(fmt, ...) do { if (info_.debug_level >= ERR_LEVEL)	\
	printf(fmt, ##__VA_ARGS__);					\
} while(0)

static inline void dump_stack(void)
{
#define STACK_SIZE 512
	int j, nptrs;
	void *buffer[STACK_SIZE];
	char **strings;

	if (info_.debug_level < ERR_LEVEL)
		return;

	nptrs = backtrace(buffer, STACK_SIZE);
	strings = backtrace_symbols(buffer, nptrs);

	printf("dump_stack:\n");
	for (j = 0; j < nptrs; j++)
		printf("%s\n", strings[j]);

	free(strings);
}

static inline u32 get_random_u32(void)
{
	srand(time(NULL));
	return rand();
}

static inline time_t ktime_get_seconds(void)
{
	return time(NULL);
}

#define likely(x) (x)
#define unlikely(x) (x)

#define cond_resched() do {} while(0)

#define BUG() do {				\
	assert(0);				\
} while(0)
#define BUG_ON(cond) do {			\
	assert(!cond);				\
} while(0)

#define smp_wmb()		do {} while(0)
#define smp_rmb()		do {} while(0)
#define smp_mb__before_atomic()	do {} while(0)
#define smp_mb__after_atomic()	do {} while(0)

#define min3(x, y, z) min((typeof(x))min(x, y), z)

static inline u64 div_u64(u64 dividend, u32 divisor)
{
	return dividend / divisor;
}

#define do_div(n,base) ({ \
int __res; \
__res = ((unsigned long) n) % (unsigned) base; \
n = ((unsigned long) n) / (unsigned) base; \
__res; })

#if INT_MAX != 0x7fffffff
#error : sizeof(int) must be 4 for this program
#endif

#if (~0ULL) != 0xffffffffffffffffULL
#error : sizeof(long long) must be 8 for this program
#endif

#endif