25 RCSID(
"$Id: 7a9ecfac6d839c13bdce115bb842ae39c2996267 $")
27 #include <freeradius-devel/libradius.h>
43 if ((max < 2) || (max > (1024 * 1024)))
return NULL;
45 fi = talloc_zero_size(ctx, (
sizeof(*fi) + (
sizeof(fi->
data[0])*max)));
62 for (i = 0 ; i < fi->
num; i++) {
65 element = i + fi->
first;
66 if (element > fi->
max) {
71 fi->
data[element] = NULL;
75 memset(fi, 0,
sizeof(*fi));
81 if (!fi || !data)
return 0;
83 if (fi->
num >= fi->
max)
return 0;
96 if (!fi || (fi->
num == 0))
return NULL;
110 if (!fi || (fi->
num == 0))
return NULL;
131 int main(
int argc,
char **argv)
133 int i, j, array[MAX];
139 for (j = 0; j < 5; j++) {
140 #define SPLIT (MAX/3)
141 #define COUNT ((j * SPLIT) + i)
142 for (i = 0; i < SPLIT; i++) {
143 array[COUNT % MAX] = COUNT;
146 fprintf(stderr,
"%d %d\tfailed pushing %d\n",
152 fprintf(stderr,
"%d %d\tgot size %d expected %d\n",
159 fprintf(stderr,
"HALF %d %d\n",
164 for (i = 0; i < SPLIT; i++) {
169 fprintf(stderr,
"No pop at %d\n", i);
174 fprintf(stderr,
"%d %d\tgot %d expected %d\n",
180 fprintf(stderr,
"%d %d\tgot size %d expected %d\n",
187 fprintf(stderr,
"ZERO %d %d\n",
void fr_fifo_free(fr_fifo_t *fi)
void * fr_fifo_peek(fr_fifo_t *fi)
unsigned int fr_fifo_num_elements(fr_fifo_t *fi)
int fr_fifo_push(fr_fifo_t *fi, void *data)
fr_fifo_t * fr_fifo_create(TALLOC_CTX *ctx, int max, fr_fifo_free_t freeNode)
void(* fr_fifo_free_t)(void *)
int main(int argc, char *argv[])
void * fr_fifo_pop(fr_fifo_t *fi)