modules/filesys/filelist.c File Reference

#include "filelist.h"

Go to the source code of this file.

Functions

static filelist_tfilelist_new (void)
static void filelist_free (filelist_t *flist)
static void filelist_add (filelist_t *flist, char *filename)
static void filelist_addout (filelist_t *flist, char *desc)
static void filelist_idxshow (filelist_t *flist, int idx)
static void filelist_qsort (filelist_t *flist, int l, int r)
static void filelist_sort (filelist_t *flist)


Function Documentation

static void filelist_add ( filelist_t flist,
char *  filename 
) [static]

Definition at line 62 of file filelist.c.

References filelist_t::elements, FILELIST_LE, NULL, and filelist_t::tot.

Referenced by filedb_ls().

00063 {
00064   flist->tot++;
00065   flist->elements = realloc(flist->elements, flist->tot * sizeof(filelist_t));
00066   FILELIST_LE(flist).fn = strdup(filename);
00067   FILELIST_LE(flist).output = NULL;
00068 }

static void filelist_addout ( filelist_t flist,
char *  desc 
) [static]

Definition at line 72 of file filelist.c.

References FILELIST_LE.

Referenced by filedb_ls().

00073 {
00074   if (FILELIST_LE(flist).output) {
00075     FILELIST_LE(flist).output = realloc(FILELIST_LE(flist).output, strlen(FILELIST_LE(flist).output) + strlen(desc) + 1);
00076     strcat(FILELIST_LE(flist).output, desc);
00077   } else
00078     FILELIST_LE(flist).output = strdup(desc);
00079 }

static void filelist_free ( filelist_t flist  )  [static]

Definition at line 44 of file filelist.c.

References filelist_t::elements, filelist_element_t::fn, filelist_element_t::output, and filelist_t::tot.

Referenced by filedb_ls().

00045 {
00046   int i;
00047 
00048   if (!flist)
00049     return;
00050   for (i = 0; i < flist->tot; i++) {
00051     if (flist->elements[i].output)
00052       free_null(flist->elements[i].output);
00053     free_null(flist->elements[i].fn);
00054   }
00055   if (flist->elements)
00056     free_null(flist->elements);
00057   free_null(flist);
00058 }

static void filelist_idxshow ( filelist_t flist,
int  idx 
) [inline, static]

Definition at line 82 of file filelist.c.

References filelist_t::elements, filelist_element_t::output, and filelist_t::tot.

Referenced by filedb_ls().

00083 {
00084   int i;
00085 
00086   for (i = 0; i < flist->tot; i++)
00087     dprintf(idx, "%s", flist->elements[i].output);
00088 }

static filelist_t* filelist_new ( void   )  [static]

Definition at line 34 of file filelist.c.

References filelist_t::elements, NULL, and filelist_t::tot.

Referenced by filedb_ls().

00035 {
00036   filelist_t *flist;
00037 
00038   flist = malloc(sizeof(filelist_t));
00039   flist->tot = 0;
00040   flist->elements = NULL;
00041   return flist;
00042 }

static void filelist_qsort ( filelist_t flist,
int  l,
int  r 
) [static]

Definition at line 93 of file filelist.c.

References filelist_t::elements, filelist_element_t::fn, and filelist_element_t::output.

Referenced by filelist_sort().

00094 {
00095   int i = l, j = r, middle;
00096   filelist_element_t *el = flist->elements, elt;
00097 
00098   middle = ((l + r) / 2);
00099   do {
00100     while (strcmp(el[i].fn, el[middle].fn) < 0)
00101       i++;
00102     while (strcmp(el[j].fn, el[middle].fn) > 0)
00103       j--;
00104     if (i <= j) {
00105       if (strcmp(el[j].fn, el[i].fn)) {
00106   elt.fn = el[j].fn;
00107   elt.output = el[j].output;
00108   el[j].fn = el[i].fn;
00109   el[j].output = el[i].output;
00110   el[i].fn = elt.fn;
00111   el[i].output = elt.output;
00112       }
00113       i++;
00114       j--;
00115     }
00116   } while (i <= j);
00117   if (l < j)
00118     filelist_qsort(flist, l, j);
00119   if (i < r)
00120     filelist_qsort(flist, i, r);
00121 }

static void filelist_sort ( filelist_t flist  )  [static]

Definition at line 125 of file filelist.c.

References filelist_qsort(), and filelist_t::tot.

Referenced by filedb_ls().

00126 {
00127   if (flist->tot < 2)
00128     return;
00129   filelist_qsort(flist, 0, (flist->tot - 1));
00130 }


Generated on Sun Nov 30 18:43:35 2008 for eggdrop1.9 by  doxygen 1.5.6