sn-evolution: Implemented the use of `getopt'.
[sort-networks.git] / src / sn_network.c
index 3934e91..3a37bb2 100644 (file)
@@ -34,6 +34,7 @@ void sn_network_destroy (sn_network_t *n)
       sn_stage_destroy (n->stages[i]);
       n->stages[i] = NULL;
     }
+    free (n->stages);
     n->stages = NULL;
   }
 
@@ -68,8 +69,11 @@ int sn_network_stage_remove (sn_network_t *n, int s_num)
   n->stages[s_num] = NULL;
 
   if (nmemb > 0)
+  {
     memmove (n->stages + s_num, n->stages + (s_num + 1),
        nmemb * sizeof (sn_stage_t *));
+    n->stages[n->stages_num - 1] = NULL;
+  }
   n->stages_num--;
 
   /* Free the unused memory */
@@ -202,13 +206,13 @@ static int sn_network_add_bitonic_merger_recursive (sn_network_t *n,
   int m;
   int i;
 
+  if (num == 1)
+    return (0);
+
   s = sn_stage_create (n->stages_num);
   if (s == NULL)
     return (-1);
 
-  if (num == 1)
-    return (0);
-
   m = num / 2;
 
   for (i = low; i < (low + m); i++)
@@ -399,4 +403,20 @@ int sn_network_write (sn_network_t *n, FILE *fh)
   return (0);
 } /* int sn_network_write */
 
+int sn_network_write_file (sn_network_t *n, const char *file)
+{
+  int status;
+  FILE *fh;
+
+  fh = fopen (file, "w");
+  if (fh == NULL)
+    return (-1);
+
+  status = sn_network_write (n, fh);
+
+  fclose (fh);
+
+  return (status);
+} /* int sn_network_write_file */
+
 /* vim: set shiftwidth=2 softtabstop=2 : */