--- psiconv/trunk/lib/psiconv/list.c 2000/12/23 20:21:40 72 +++ psiconv/trunk/lib/psiconv/list.c 2000/12/25 00:26:53 76 @@ -118,12 +118,35 @@ { size_t res; if (psiconv_list_resize(l,l->cur_len + size)) - return -PSICONV_E_NOMEM; + return 0; res = fread(((char *) (l->els)) + l->cur_len * l->el_size,l->el_size,size,f); l->cur_len += res; return res; } +int psiconv_list_fread_all(psiconv_list l, FILE *f) +{ + while (!feof(f)) { + if (!psiconv_list_fread(l,1024,f) && !feof(f)) + return -PSICONV_E_NOMEM; + } + return -PSICONV_E_OK; +} + +int psiconv_list_fwrite_all(const psiconv_list l, FILE *f) +{ + int pos = 0; + int written; + int len = psiconv_list_length(l); + while (pos < len) { + if (!(written = fwrite(((char *)(l->els)) + pos * l->el_size,l->el_size, + len - pos,f))) + return -PSICONV_E_OTHER; + pos += written; + } + return -PSICONV_E_OK; +} + int psiconv_list_resize(psiconv_list l,unsigned int nr) { void * temp; @@ -133,21 +156,24 @@ temp = realloc(l->els,l->max_len * l->el_size); if (temp) { l->els = temp; - return 0; + return -PSICONV_E_OK; } else return -PSICONV_E_NOMEM; } - return 0; + return -PSICONV_E_OK; } int psiconv_list_concat(psiconv_list l, const psiconv_list extra) { int res; + if (l->el_size != extra->el_size) + return -PSICONV_E_OTHER; if ((res = psiconv_list_resize(l, - l->cur_len + extra->cur_len * extra->el_size))) + l->cur_len + extra->cur_len))) return res; /* Unreadable but correct. */ memcpy(((char *) (l->els)) + l->cur_len * l->el_size,extra->els, extra->cur_len * extra->el_size); + l->cur_len += extra->cur_len; return 0; }