]> andersk Git - moira.git/blobdiff - lib/sq.c
Use mrcl_connect() so we send a query version.
[moira.git] / lib / sq.c
index 63eb625c97c686d64ba3cd06c59a0e5f38c3e40c..e7ff6a6fd132805e41d2798e368e9a90c2fa52f0 100644 (file)
--- a/lib/sq.c
+++ b/lib/sq.c
-/* $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 <sms.h>
+#include <moira.h>
 
-struct save_queue *
-sq_create()
+#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;
+  sq->q_next = sq;
+  sq->q_prev = sq;
+  sq->q_lastget = 0;
+  return sq;
+}
 
-    sq = (struct save_queue *)malloc(sizeof (struct save_queue));
-    sq->q_next = sq;
-    sq->q_prev = sq;
-    sq->q_lastget = 0;
-    return(sq);
+int sq_save_data(struct save_queue *sq, void *data)
+{
+  struct save_queue *q;
+
+  q = malloc(sizeof(struct save_queue));
+  if (!q)
+    return 0;
+  q->q_next = sq;
+  q->q_prev = sq->q_prev;
+  sq->q_prev->q_next = q;
+  sq->q_prev = q;
+  q->q_data = data;
+  return 1;
 }
 
-sq_save_data(sq, data)
-    register struct save_queue *sq;
-    char *data;
+int sq_save_args(int argc, char *argv[], struct save_queue *sq)
 {
-    register struct save_queue *q;
-
-    q = (struct save_queue *)malloc(sizeof (struct save_queue));
-    q->q_next = sq;
-    q->q_prev = sq->q_prev;
-    sq->q_prev->q_next = q;
-    sq->q_prev = q;
-    q->q_data = data;
+  char **argv_copy;
+  int i, n;
+
+  argv_copy = malloc(argc * sizeof(char *));
+  if (!argv_copy)
+    return 0;
+  for (i = 0; i < argc; i++)
+    {
+      n = strlen(argv[i]) + 1;
+      argv_copy[i] = malloc(n);
+      if (!argv_copy[i])
+       {
+         for (i--; i >= 0; i--)
+           free(argv_copy[i]);
+         free(argv_copy);
+         return 0;
+       }
+      memcpy(argv_copy[i], argv[i], n);
+    }
+
+  return sq_save_data(sq, argv_copy);
 }
 
-sq_save_args(argc, argv, sq)
-    register struct save_queue *sq;
-    register int argc;
-    register char *argv[];
+int sq_save_unique_data(struct save_queue *sq, void *data)
 {
-    register char **argv_copy;
-    register int i;
-    register int n;
-
-    argv_copy = (char **)malloc(argc * sizeof (char *));
-    for (i = 0; i < argc; i++) {
-       n = strlen(argv[i]) + 1;
-       argv_copy[i] = (char *)malloc(n);
-       bcopy(argv[i], argv_copy[i], n);
+  struct save_queue *q;
+
+  for (q = sq->q_next; q != sq; q = q->q_next)
+    {
+      if (q->q_data == data)
+       return 1;
     }
 
-    sq_save_data(sq, argv_copy);
+  return sq_save_data(sq, data);
 }
 
-sq_save_unique_data(sq, data)
-    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)
-       if (q->q_data == data) return;
+  for (q = sq->q_next; q != sq; q = q->q_next)
+    {
+      if (!strcmp(q->q_data, data))
+       return 1;
+    }
 
-    sq_save_data(sq, data);
+  return sq_save_data(sq, data);
 }
 
-sq_save_unique_string(sq, data)
-    register struct save_queue *sq;
-    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)
 {
-    register struct save_queue *q;
+  void **dptr = data;
 
-    for (q = sq->q_next; q != sq; q = q->q_next)
-       if (!strcmp(q->q_data, data)) return;
+  if (sq->q_lastget == NULL)
+    sq->q_lastget = sq->q_next;
+  else
+    sq->q_lastget = sq->q_lastget->q_next;
 
-    sq_save_data(sq, data);
+  if (sq->q_lastget == sq)
+    return 0;
+  *dptr = sq->q_lastget->q_data;
+  return 1;
 }
 
-sq_get_data(sq, data)
-    register struct save_queue *sq;
-    register char **data;
+int sq_remove_data(struct save_queue *sq, void *data)
 {
-    if (sq->q_lastget == (struct save_queue *)0) {
-       sq->q_lastget = sq->q_next;
-    } else {
-       sq->q_lastget = sq->q_lastget->q_next;
+  void **dptr = data;
+
+  if (sq->q_next != sq)
+    {
+      *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 1;
     }
+  return 0;
+}
+
+void sq_remove_last_data(struct save_queue *sq)
+{
+  struct save_queue *rem = sq->q_lastget;
 
-    if (sq->q_lastget == sq) return(0);
-    *data = sq->q_lastget->q_data;
-    return(1);
+  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;
+  else
+    return 0;
 }
 
-sq_destroy(sq)
-    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) {
-       sq->q_next = q->q_next;
-       free(q);                        
+  for (q = sq->q_next; q != sq; q = sq->q_next)
+    {
+      sq->q_next = q->q_next;
+      free(q);
     }
-    free(sq);
+  free(sq);
 }
 
This page took 0.043818 seconds and 4 git commands to generate.