Universität Ulm,
SAI,
Übungen zu
Systemnahe Software I
Lösungsbeispiel zu Blatt 9 (Aufgabe 13): extract
Dateien vom Archiv in den Arbeitskatalog kopieren.
/*
* extract.h - Headerfile for SAM extract function.
*
* Martin Hasch, University of Ulm, January 1997.
*/
#include "names.h"
/*
* Extract given files or everything from archive into working directory.
* If any files are not present return ECODE_ERROR, on success
* return ECODE_SUCCESS, on serious problems abort program.
*/
int extract(char *archive, names_List list);
/*
* extract.c - SAM extract function.
*
* Martin Hasch, University of Ulm, January 1997.
*/
#include "sam.h"
#include "names.h"
#include "parser.h"
#include "extract.h"
/*
* Extract given files or everything from archive into working directory.
* If any files are not present return ECODE_ERROR, on success
* return ECODE_SUCCESS, on serious problems abort program.
*/
int extract(char *archive, names_List list)
{
parser_Locator oldarch;
sam_Header header;
names_List thisname;
int all;
int badfiles = 0;
all = list == NULL;
parser_openread(archive, &oldarch);
while ( parser_getheader(oldarch, &header) ) {
if ( all || (thisname = names_get(list, header.sam_name)) !=
NULL ) {
if ( !parser_copyout(oldarch, &header) )
++badfiles;
if ( !all )
list = names_delete(list, thisname);
} else {
parser_skipbody(oldarch, &header);
}
}
parser_close(oldarch);
if ( list != NULL ) {
names_notfound(list);
return ECODE_ERROR;
}
return badfiles? ECODE_ERROR: ECODE_SUCCESS;
}
<- Alle Module
Martin Hasch, Februar 1997