]> andersk Git - moira.git/blame - lib/sq.c
Code style cleanup. (No functional changes)
[moira.git] / lib / sq.c
CommitLineData
1992b825 1/* $Header$
2 *
3 * Generic Queue Routines
babbc197 4 *
5 * (c) Copyright 1988 by the Massachusetts Institute of Technology.
6 * For copying and distribution information, please see the file
7 * <mit-copyright.h>.
1992b825 8 */
9
babbc197 10#include <mit-copyright.h>
8defc06b 11#include <moira.h>
8fd777cf 12#include <string.h>
a43ce477 13#include <stdlib.h>
24582af9 14
5eaef520 15struct save_queue *sq_create(void)
1992b825 16{
5eaef520 17 register struct save_queue *sq;
18
19 sq = malloc(sizeof(struct save_queue));
20 if (!sq)
21 return sq;
22 sq->q_next = sq;
23 sq->q_prev = sq;
24 sq->q_lastget = 0;
25 return sq;
1992b825 26}
27
5eaef520 28int sq_save_data(register struct save_queue *sq, char *data)
1992b825 29{
5eaef520 30 register struct save_queue *q;
31
32 q = malloc(sizeof(struct save_queue));
33 if (!q)
34 return 0;
35 q->q_next = sq;
36 q->q_prev = sq->q_prev;
37 sq->q_prev->q_next = q;
38 sq->q_prev = q;
39 q->q_data = data;
40 return 1;
1992b825 41}
42
5eaef520 43int sq_save_args(register int argc, register char *argv[],
44 register struct save_queue *sq)
1992b825 45{
5eaef520 46 register char **argv_copy;
47 register int i;
48 register int n;
49
50 argv_copy = malloc(argc * sizeof(char *));
51 if (!argv_copy)
52 return 0;
53 for (i = 0; i < argc; i++)
54 {
55 n = strlen(argv[i]) + 1;
56 argv_copy[i] = malloc(n);
57 if (!argv_copy[i])
58 {
59 for (i--; i >= 0; i--)
60 free(argv_copy[i]);
61 free(argv_copy);
9d627547 62 return 0;
63 }
5eaef520 64 memcpy(argv_copy[i], argv[i], n);
1992b825 65 }
66
5eaef520 67 return sq_save_data(sq, (char *)argv_copy);
1992b825 68}
69
5eaef520 70int sq_save_unique_data(register struct save_queue *sq, char *data)
1992b825 71{
5eaef520 72 register struct save_queue *q;
1992b825 73
5eaef520 74 for (q = sq->q_next; q != sq; q = q->q_next)
75 {
76 if (q->q_data == data)
77 return 1;
78 }
1992b825 79
5eaef520 80 return sq_save_data(sq, data);
1992b825 81}
82
5eaef520 83int sq_save_unique_string(register struct save_queue *sq, char *data)
1992b825 84{
5eaef520 85 register struct save_queue *q;
1992b825 86
5eaef520 87 for (q = sq->q_next; q != sq; q = q->q_next)
88 {
89 if (!strcmp(q->q_data, data))
90 return 1;
91 }
1992b825 92
5eaef520 93 return sq_save_data(sq, data);
1992b825 94}
95
5eaef520 96int sq_get_data(register struct save_queue *sq, register char **data)
1992b825 97{
5eaef520 98 if (sq->q_lastget == (struct save_queue *)0)
99 sq->q_lastget = sq->q_next;
100 else
101 sq->q_lastget = sq->q_lastget->q_next;
102
103 if (sq->q_lastget == sq)
104 return 0;
105 *data = sq->q_lastget->q_data;
106 return 1;
1992b825 107}
108
5eaef520 109int sq_remove_data(register struct save_queue *sq, register char **data)
bfa8d940 110{
5eaef520 111 if (sq->q_next != sq)
112 {
113 *data = sq->q_next->q_data;
114 sq->q_next = sq->q_next->q_next;
115 free(sq->q_next->q_prev);
116 sq->q_next->q_prev = sq;
117 return 1;
bfa8d940 118 }
5eaef520 119 return 0;
bfa8d940 120}
121
5eaef520 122int sq_empty(register struct save_queue *sq)
bfa8d940 123{
5eaef520 124 if (sq->q_next == sq)
125 return 1;
126 else
127 return 0;
bfa8d940 128}
129
5eaef520 130sq_destroy(register struct save_queue *sq)
1992b825 131{
5eaef520 132 register struct save_queue *q;
1992b825 133
5eaef520 134 for (q = sq->q_next; q != sq; q = sq->q_next)
135 {
136 sq->q_next = q->q_next;
137 free(q);
1992b825 138 }
5eaef520 139 free(sq);
1992b825 140}
141
This page took 0.102388 seconds and 5 git commands to generate.