00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifdef HAVE_CONFIG_H
00022 #include "config.h"
00023 #endif
00024
00025 #include <stdlib.h>
00026 #include <string.h>
00027 #include <assert.h>
00028
00029 #include "libdefs.h"
00030 #include "error.h"
00031 #include "arrays.h"
00032 #include "dbfiles.h"
00033
00034 void fid_dbfiles_free(fid_DBfiles *dbfiles)
00035 {
00036 size_t i;
00037
00038 if(dbfiles == NULL || dbfiles->dyndata == NULL)
00039 {
00040 return;
00041 }
00042
00043 for(i=0; i < dbfiles->occupied; ++i)
00044 {
00045 if(dbfiles->dyndata[i].name != NULL)
00046 {
00047 free(dbfiles->dyndata[i].name);
00048 }
00049 }
00050 fid_DYNARRAY_FREE(dbfiles,fid_DBfileinfo);
00051 }
00052
00053
00054
00055 int fid_dbfiles_append(fid_DBfiles *dbfiles, char *name, fid_Uint64 inputlen,
00056 fid_Uint64 seqlen, fid_Error *error)
00057 {
00058 fid_DBfileinfo *entry;
00059
00060 fid_DYNARRAY_ENSURE_NEXT(dbfiles,fid_DBfileinfo,8,
00061 fid_OUTOFMEM(error);
00062 return -1;);
00063
00064 entry=&dbfiles->dyndata[dbfiles->occupied++];
00065 entry->name=name;
00066 entry->inputfile_length=inputlen;
00067 entry->sequence_length=seqlen;
00068 return 0;
00069 }
00070
00071
00072
00073 int fid_dbfiles_append_copy(fid_DBfiles *dbfiles, char *name,
00074 fid_Uint64 inputlen, fid_Uint64 seqlen,
00075 fid_Error *error)
00076 {
00077 char *temp;
00078 int retval;
00079
00080 assert(name != NULL);
00081 if((temp=strdup(name)) == NULL)
00082 {
00083 fid_OUTOFMEM(error);
00084 return -1;
00085 }
00086
00087 if((retval=fid_dbfiles_append(dbfiles,temp,inputlen,seqlen,error)) == 0)
00088 {
00089 return 0;
00090 }
00091 else
00092 {
00093 free(temp);
00094 return retval;
00095 }
00096 }
00097
00098 int fid_dbfiles_copy(fid_DBfiles *dest, const fid_DBfiles *src,
00099 fid_Error *error)
00100 {
00101 size_t i;
00102 char *temp;
00103 int retcode=0;
00104
00105 assert(dest != NULL);
00106 assert(src != NULL);
00107
00108 fid_DYNARRAY_INIT(dest,fid_DBfileinfo);
00109 for(i=0; retcode == 0 && i < src->occupied; ++i)
00110 {
00111 if((temp=strdup(src->dyndata[i].name)) == NULL)
00112 {
00113 retcode=-1;
00114 break;
00115 }
00116
00117 if((retcode=fid_dbfiles_append(dest,temp,
00118 src->dyndata[i].inputfile_length,
00119 src->dyndata[i].sequence_length,
00120 error)) == -1)
00121 {
00122 free(temp);
00123 }
00124 }
00125 return retcode;
00126 }
00127
00128
00129
00130 void fid_dbfiles_dump(const fid_DBfiles *dbfiles, FILE *stream)
00131 {
00132 size_t i;
00133 const fid_DBfileinfo *entry;
00134
00135 fprintf(stream,"DUMP %lu dbfiles:\n",(unsigned long)dbfiles->occupied);
00136 for(i=0; i < dbfiles->occupied; ++i)
00137 {
00138 entry=&dbfiles->dyndata[i];
00139 fprintf(stream," \"%s\"\n"
00140 " input file size " fid_U64FMT ", sequence size "
00141 fid_U64FMT "\n",
00142 entry->name,entry->inputfile_length,entry->sequence_length);
00143 }
00144 }
00145
00146