-/* $Header$
+/* $Id$
*
* Generic Queue Routines
*
- * (c) Copyright 1988 by the Massachusetts Institute of Technology.
- * For copying and distribution information, please see the file
- * <mit-copyright.h>.
+ * Copyright (C) 1988-1998 by the Massachusetts Institute of Technology.
+ * For copying and distribution information, please see the file
+ * <mit-copyright.h>.
*/
#include <mit-copyright.h>
#include <moira.h>
-#include <string.h>
+
#include <stdlib.h>
+#include <string.h>
+
+RCSID("$Header$");
struct save_queue *sq_create(void)
{
- register struct save_queue *sq;
+ struct save_queue *sq;
sq = malloc(sizeof(struct save_queue));
if (!sq)
return sq;
}
-int sq_save_data(register struct save_queue *sq, char *data)
+int sq_save_data(struct save_queue *sq, void *data)
{
- register struct save_queue *q;
+ struct save_queue *q;
q = malloc(sizeof(struct save_queue));
if (!q)
return 1;
}
-int sq_save_args(register int argc, register char *argv[],
- register struct save_queue *sq)
+int sq_save_args(int argc, char *argv[], struct save_queue *sq)
{
- register char **argv_copy;
- register int i;
- register int n;
+ char **argv_copy;
+ int i, n;
argv_copy = malloc(argc * sizeof(char *));
if (!argv_copy)
memcpy(argv_copy[i], argv[i], n);
}
- return sq_save_data(sq, (char *)argv_copy);
+ return sq_save_data(sq, argv_copy);
}
-int sq_save_unique_data(register struct save_queue *sq, char *data)
+int sq_save_unique_data(struct save_queue *sq, void *data)
{
- register struct save_queue *q;
+ struct save_queue *q;
for (q = sq->q_next; q != sq; q = q->q_next)
{
return sq_save_data(sq, data);
}
-int sq_save_unique_string(register struct save_queue *sq, char *data)
+int sq_save_unique_string(struct save_queue *sq, char *data)
{
- register struct save_queue *q;
+ struct save_queue *q;
for (q = sq->q_next; q != sq; q = q->q_next)
{
return sq_save_data(sq, data);
}
-int sq_get_data(register struct save_queue *sq, register char **data)
+/* in sq_get_data and sq_remove_data, `data' is actually a pointer to the
+ variable to put the data in to. */
+
+int sq_get_data(struct save_queue *sq, void *data)
{
- if (sq->q_lastget == (struct save_queue *)0)
+ void **dptr = data;
+
+ if (sq->q_lastget == NULL)
sq->q_lastget = sq->q_next;
else
sq->q_lastget = sq->q_lastget->q_next;
if (sq->q_lastget == sq)
return 0;
- *data = sq->q_lastget->q_data;
+ *dptr = sq->q_lastget->q_data;
return 1;
}
-int sq_remove_data(register struct save_queue *sq, register char **data)
+int sq_remove_data(struct save_queue *sq, void *data)
{
+ void **dptr = data;
+
if (sq->q_next != sq)
{
- *data = sq->q_next->q_data;
+ *dptr = sq->q_next->q_data;
sq->q_next = sq->q_next->q_next;
free(sq->q_next->q_prev);
sq->q_next->q_prev = sq;
return 0;
}
-int sq_empty(register struct save_queue *sq)
+void sq_remove_last_data(struct save_queue *sq)
+{
+ struct save_queue *rem = sq->q_lastget;
+
+ if (rem != NULL)
+ {
+ rem->q_next->q_prev = sq->q_lastget = rem->q_prev;
+ rem->q_prev->q_next = rem->q_next;
+ free(rem);
+ }
+}
+
+int sq_empty(struct save_queue *sq)
{
if (sq->q_next == sq)
return 1;
return 0;
}
-sq_destroy(register struct save_queue *sq)
+void sq_destroy(struct save_queue *sq)
{
- register struct save_queue *q;
+ struct save_queue *q;
for (q = sq->q_next; q != sq; q = sq->q_next)
{