]> andersk Git - moira.git/blame - lib/sq.c
remove dependancy on resolver internals
[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>
1992b825 12
24582af9 13extern char *malloc();
14
1992b825 15struct save_queue *
16sq_create()
17{
18 register struct save_queue *sq;
19
20 sq = (struct save_queue *)malloc(sizeof (struct save_queue));
21 sq->q_next = sq;
22 sq->q_prev = sq;
23 sq->q_lastget = 0;
24 return(sq);
25}
26
27sq_save_data(sq, data)
28 register struct save_queue *sq;
29 char *data;
30{
31 register struct save_queue *q;
32
33 q = (struct save_queue *)malloc(sizeof (struct save_queue));
34 q->q_next = sq;
35 q->q_prev = sq->q_prev;
36 sq->q_prev->q_next = q;
37 sq->q_prev = q;
38 q->q_data = data;
39}
40
41sq_save_args(argc, argv, sq)
42 register struct save_queue *sq;
43 register int argc;
44 register char *argv[];
45{
46 register char **argv_copy;
47 register int i;
48 register int n;
49
50 argv_copy = (char **)malloc(argc * sizeof (char *));
51 for (i = 0; i < argc; i++) {
52 n = strlen(argv[i]) + 1;
53 argv_copy[i] = (char *)malloc(n);
54 bcopy(argv[i], argv_copy[i], n);
55 }
56
24582af9 57 sq_save_data(sq, (char *)argv_copy);
1992b825 58}
59
60sq_save_unique_data(sq, data)
61 register struct save_queue *sq;
62 char *data;
63{
64 register struct save_queue *q;
65
66 for (q = sq->q_next; q != sq; q = q->q_next)
67 if (q->q_data == data) return;
68
69 sq_save_data(sq, data);
70}
71
72sq_save_unique_string(sq, data)
73 register struct save_queue *sq;
74 char *data;
75{
76 register struct save_queue *q;
77
78 for (q = sq->q_next; q != sq; q = q->q_next)
79 if (!strcmp(q->q_data, data)) return;
80
81 sq_save_data(sq, data);
82}
83
84sq_get_data(sq, data)
85 register struct save_queue *sq;
86 register char **data;
87{
88 if (sq->q_lastget == (struct save_queue *)0) {
89 sq->q_lastget = sq->q_next;
90 } else {
91 sq->q_lastget = sq->q_lastget->q_next;
92 }
93
94 if (sq->q_lastget == sq) return(0);
95 *data = sq->q_lastget->q_data;
96 return(1);
97}
98
bfa8d940 99sq_remove_data(sq, data)
100 register struct save_queue *sq;
101 register char **data;
102{
103 if (sq->q_next != sq) {
104 *data = sq->q_next->q_data;
105 sq->q_next = sq->q_next->q_next;
106 free(sq->q_next->q_prev);
107 sq->q_next->q_prev = sq;
108 return(1);
109 }
110 return(0);
111}
112
113int sq_empty(sq)
114 register struct save_queue *sq;
115{
116 if (sq->q_next == sq)
117 return(1);
118 else
119 return(0);
120}
121
1992b825 122sq_destroy(sq)
123 register struct save_queue *sq;
124{
125 register struct save_queue *q;
126
127 for (q = sq->q_next; q != sq; q = sq->q_next) {
128 sq->q_next = q->q_next;
129 free(q);
130 }
131 free(sq);
132}
133
This page took 0.084987 seconds and 5 git commands to generate.