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