tabular output: fix segmentation fault
[openafs.git] / src / util / tabular_output.c
index b879b8d..6c053cc 100644 (file)
 
 #include <afsconfig.h>
 #include <afs/param.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <time.h>
+
+#include <roken.h>
+
 #include <afs/afsutil.h>
 #include <afs/tabular_output.h>
-#include <errno.h>
 
 /* private structures */
 
@@ -340,13 +337,12 @@ util_newCellContents(struct util_Table* Table) {
     char **CellContents=NULL;
     int i;
 
-    if ( (CellContents=(char **) malloc( sizeof(char *) * Table->numColumns))\
-          == NULL ) {
+    if ( (CellContents=malloc( sizeof(char *) * Table->numColumns))== NULL ) {
         fprintf(stderr,"Internal Error. Cannot allocate memory for new CellContents-array.\n");
         exit(EXIT_FAILURE);
     }
     for (i=0;i<Table->numColumns;i++) {
-        if ( (CellContents[i]=(char *) malloc(UTIL_T_MAX_CELLCONTENT_LEN)) == NULL)  {
+        if ( (CellContents[i]=malloc(UTIL_T_MAX_CELLCONTENT_LEN)) == NULL)  {
             fprintf(stderr,\
                     "Internal Error. Cannot allocate memory for new CellContents-array.\n");
             exit(EXIT_FAILURE);
@@ -370,9 +366,11 @@ util_newTable(int Type, int numColumns, char **ColumnHeaders, int *ColumnContent
     Table->Type=Type;
     Table->numColumns=numColumns;
     Table->numRows=0;
+    Table->numAllocatedRows=0;
     if (sortByColumn < 0 || sortByColumn > numColumns) {
         fprintf(stderr,"Invalid Table Sortkey: %d.\n", sortByColumn);
        errno=EINVAL;
+       free(Table);
        return NULL;
     }
     if (sortByColumn > 0 )
@@ -402,6 +400,7 @@ util_newTable(int Type, int numColumns, char **ColumnHeaders, int *ColumnContent
                 break;
         default :
                 fprintf(stderr,"Error. Invalid TableType: %d.\n", Table->Type);
+               free(Table);
                errno=EINVAL;
                 return NULL;
     }
@@ -420,7 +419,7 @@ struct util_TableRow*
 newTableRow(struct util_Table* Table) {
     struct util_TableRow *aRow =NULL;
 
-    if ( (aRow= (struct util_TableRow*) malloc(sizeof(struct util_TableRow))) == NULL) {
+    if ( (aRow = malloc(sizeof(struct util_TableRow))) == NULL) {
         fprintf(stderr,\
                 "Internal Error. Cannot allocate memory for new TableRow.\n");
         exit(EXIT_FAILURE);
@@ -472,7 +471,7 @@ compareBodyRow(struct util_Table *Table, int RowIndx, struct util_TableRow *aRow
 /* find correct index for new row by bi-secting the table */
 int
 findRowIndex(struct util_Table* Table, struct util_TableRow *aRow){
-    int cmp,best,lower,middle,upper;
+    int cmp,lower,middle,upper;
 
     /* empty Table */
     if (Table->numRows == 0)  {
@@ -489,17 +488,14 @@ findRowIndex(struct util_Table* Table, struct util_TableRow *aRow){
 
     lower =  0;
     upper= Table->numRows-1;
-    best=0;
     do {
         middle=(upper-lower)/2+lower;
         cmp=compareBodyRow(Table,middle,aRow);
        if (cmp > 0)  {
             upper=middle;
-            best = lower;
         }
         if (cmp < 0)  {
             lower=middle;
-            best = upper;
         }
         if (cmp == 0) {
             return middle;