File:  [Public] / rpm2html / rdf.c
Revision 1.3: download - view: text, annotated - select for diffs
Mon May 4 02:52:56 1998 UTC (26 years, 1 month ago) by veillard
Branches: MAIN
CVS tags: HEAD
Added rdf_api.h, cleanups, Daniel

/*
 * rdf.c : implementation for the RDF encoding/decoding of RPM informations.
 */

#include "config.h"
#ifdef HAVE_FCNTL_H
#include <fcntl.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#include <time.h>
#include <errno.h>
#include <ctype.h>

#include "rpm2html.h"
#include "rpmdata.h"
#include "parser.h"
#include "tree.h"
#include "rdf.h"
#include "html.h"

/*
 * Open an RDF file call the parser to create a XML tree
 * Then walk the tree and build an rpmData structure for
 * the corresponding package.
 */
rpmDataPtr rpmOpenRdf(char *nameRpm, rpmDirPtr dir, rpmSubdirPtr tree) {
    return(NULL);
}

/*
 * Create and RDF file containing the description for the
 * given RPM data.
 */
void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) {
    struct tm * tstruct;
    rpmDirPtr dir = rpm->dir;
    char *base = dir->dir;
    FILE *rdf;
    int i;
    char buf[1000];

    if (rpm2html_rdf_dir != NULL) base = rpm2html_rdf_dir;

    if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) {
	if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
	    sprintf(buf, "%s/%s/%s/%s.rdf", base, dir->subdir,
	            rpm->subdir, rpmName(rpm));
	else
	    sprintf(buf, "%s/%s/%s.rdf", base, dir->subdir, rpmName(rpm));
    } else {
	if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
	    sprintf(buf, "%s/%s/%s.rdf", base, rpm->subdir, rpmName(rpm));
	else
	    sprintf(buf, "%s/%s.rdf", base, rpmName(rpm));
    }

    if (checkDate(buf, rpm->stamp)) return;
    if (verbose > 1) {
        printf("Dumping %s\n", buf);
    }
    rdf = fopen(buf, "w");
    if (rdf == NULL) {
        fprintf(stderr, "Couldn't save to file %s: %s\n",
	        buf, strerror(errno));
        return;
    }
    fprintf(rdf, "<?XML version=\"1.0\">\n");
    fprintf(rdf, "<?namespace href =\"http://www.w3.org/TR/WD-rdf-syntax#/\" AS = \"RDF\"?>\n");
    fprintf(rdf, "<?namespace href =\"http://www.rpm.org/\" AS = \"RPM\"?>\n");
    fprintf(rdf, "<RDF:RDF>\n");
    fprintf(rdf, "<RDF:Description RDF:HREF=\"");
    if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) {
	if (dir->mirrors[0] != NULL)
	    fprintf(rdf, "%s/%s/%s\">\n",
		dir->mirrors[0], rpm->subdir, rpm->filename);
	else
	    fprintf(rdf, "%s/%s/%s\">\n",
		dir->ftp, rpm->subdir, rpm->filename);
    } else {
	if (dir->mirrors[0] != NULL)
	    fprintf(rdf, "%s/%s\">\n",
		dir->mirrors[0], rpm->filename);
	else
	    fprintf(rdf, "%s/%s\">\n",
		dir->ftp, rpm->filename);
    }
    fprintf(rdf, "<RPM:Name>%s</RPM:Name>\n", rpm->name);
    fprintf(rdf, "<RPM:Version>%s</RPM:Version>\n", rpm->version);
    fprintf(rdf, "<RPM:Release>%s</RPM:Release>\n", rpm->release);
    if (rpm->distribution)
	fprintf(rdf, "<RPM:Distribution>%s</RPM:Distribution>\n",
	        rpm->distribution);
    if (rpm->vendor)
	fprintf(rdf, "<RPM:Vendor>%s</RPM:Vendor>\n", rpm->vendor);
    fprintf(rdf, "<RPM:Size>%d</RPM:Size>\n", rpm->size);
    if (rpm->url)
	fprintf(rdf, "<RPM:URL>%s</RPM:URL>\n", rpm->url);
    tstruct = localtime(&(rpm->date));
#ifdef HAVE_STRFTIME
    strftime(buf, sizeof(buf) - 1, "%c", tstruct);
#else
#error "no strftime, please check !"
#endif
    fprintf(rdf, "<RPM:BuildDate>%s</RPM:BuildDate>\n", buf);
    if (rpm->host)
	fprintf(rdf, "<RPM:BuildHost>%s</RPM:BuildHost>\n", rpm->host);
    if (rpm->group)
	fprintf(rdf, "<RPM:Group>%s</RPM:Group>\n", rpm->group);
    if (rpm->packager)
	fprintf(rdf, "<RPM:Packager>%s</RPM:Packager>\n", rpm->packager);
    if (dir->ftpsrc) {
	fprintf(rdf, "<RPM:Sources>%s/%s</RPM:Sources>\n",
		dir->ftpsrc, rpm->srcrpm);
    } else {
	fprintf(rdf, "<RPM:Sources>%s</RPM:Sources>\n",
		rpm->srcrpm);
    }
    if (rpm->summary)
	fprintf(rdf, "<RPM:Summary>%s</RPM:Summary>\n", rpm->summary);
    if (rpm->description)
	fprintf(rdf, "<RPM:Description>\n%s\n</RPM:Description>\n",
	        rpm->description);
    if (rpm->copyright)
	fprintf(rdf, "<RPM:Copyright>%s</RPM:Copyright>\n",
	        rpm->copyright);
    if (rpm->nb_resources > 0) {
	fprintf(rdf, "<RPM:Provides>\n");
	fprintf(rdf, "<RDF:Bag>\n");
        for (i = 0;i < rpm->nb_resources;i++) {
	    fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",
		    rpm->resources[i]->name);
        }
	fprintf(rdf, "</RDF:Bag>\n");
	fprintf(rdf, "</RPM:Provides>\n");
    }
    if (rpm->nb_requires > 0) {
	fprintf(rdf, "<RPM:Requires>\n");
	fprintf(rdf, "<RDF:Bag>\n");
        for (i = 0;i < rpm->nb_requires;i++) {
	    fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",
		    rpm->requires[i]->name);
        }
	fprintf(rdf, "</RDF:Bag>\n");
	fprintf(rdf, "</RPM:Requires>\n");
    }
    if (rpm->filelist)
	fprintf(rdf, "<RPM:Files>\n%s\n</RPM:Files>\n", rpm->filelist);
    fprintf(rdf, "</RDF:Description>\n");
    fprintf(rdf, "</RDF:RDF>\n");
    fclose(rdf);
}


Webmaster