Annotation of rpm2html/rdf.c, revision 1.2
1.1 httpng 1: /*
2: * rdf.c : implementation for the RDF encoding/decoding of RPM informations.
3: */
4:
1.2 ! httpng 5: #include "config.h"
! 6: #ifdef HAVE_FCNTL_H
! 7: #include <fcntl.h>
! 8: #endif
! 9: #include <stdio.h>
! 10: #include <stdlib.h>
! 11: #include <string.h>
! 12: #ifdef HAVE_UNISTD_H
! 13: #include <unistd.h>
! 14: #endif
! 15: #include <time.h>
1.1 httpng 16: #include <errno.h>
1.2 ! httpng 17: #include <ctype.h>
1.1 httpng 18:
19: #include "rpm2html.h"
20: #include "rpmdata.h"
21: #include "parser.h"
22: #include "tree.h"
23: #include "rdf.h"
1.2 ! httpng 24: #include "html.h"
1.1 httpng 25:
26: /*
27: * Open an RDF file call the parser to create a XML tree
28: * Then walk the tree and build an rpmData structure for
29: * the corresponding package.
30: */
31: rpmDataPtr rpmOpenRdf(char *nameRpm, rpmDirPtr dir, rpmSubdirPtr tree) {
1.2 ! httpng 32: return(NULL);
1.1 httpng 33: }
34:
35: /*
36: * Create and RDF file containing the description for the
37: * given RPM data.
38: */
39: void dumpRpmRdf(rpmDataPtr rpm, rpmSubdirPtr tree) {
40: struct tm * tstruct;
41: rpmDirPtr dir = rpm->dir;
42: FILE *rdf;
43: int i;
44: char buf[1000];
45:
46: if ((dir->subdir != NULL) && (dir->subdir[0] != '\0')) {
47: if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
48: sprintf(buf, "%s/%s/%s/%s.rdf", dir->dir, dir->subdir,
49: rpm->subdir, rpmName(rpm));
50: else
51: sprintf(buf, "%s/%s/%s.rdf", dir->dir, dir->subdir, rpmName(rpm));
52: } else {
53: if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0'))
54: sprintf(buf, "%s/%s/%s.rdf", dir->dir, rpm->subdir, rpmName(rpm));
55: else
56: sprintf(buf, "%s/%s.rdf", dir->dir, rpmName(rpm));
57: }
58:
59: if (checkDate(buf, rpm->stamp)) return;
60: if (verbose > 1) {
61: printf("Dumping %s\n", buf);
62: }
63: rdf = fopen(buf, "w");
64: if (rdf == NULL) {
65: fprintf(stderr, "Couldn't save to file %s: %s\n",
66: buf, strerror(errno));
67: return;
68: }
69: fprintf(rdf, "<?XML version=\"1.0\">\n");
70: fprintf(rdf, "<?namespace href =\"http://www.w3.org/TR/WD-rdf-syntax#/\" AS = \"RDF\"?>\n");
71: fprintf(rdf, "<?namespace href =\"http://www.rpm.org/\" AS = \"RPM\"?>\n");
72: fprintf(rdf, "<RDF:RDF>\n");
1.2 ! httpng 73: fprintf(rdf, "<RDF:Description RDF:HREF=\"");
! 74: if ((rpm->subdir != NULL) && (rpm->subdir[0] != '\0')) {
! 75: if (dir->mirrors[0] != NULL)
! 76: fprintf(rdf, "%s/%s/%s\">\n",
! 77: dir->mirrors[0], rpm->subdir, rpm->filename);
! 78: else
! 79: fprintf(rdf, "%s/%s/%s\">\n",
! 80: dir->ftp, rpm->subdir, rpm->filename);
! 81: } else {
! 82: if (dir->mirrors[0] != NULL)
! 83: fprintf(rdf, "%s/%s\">\n",
! 84: dir->mirrors[0], rpm->filename);
! 85: else
! 86: fprintf(rdf, "%s/%s\">\n",
! 87: dir->ftp, rpm->filename);
! 88: }
1.1 httpng 89: fprintf(rdf, "<RPM:Name>%s</RPM:Name>\n", rpm->name);
90: fprintf(rdf, "<RPM:Version>%s</RPM:Version>\n", rpm->version);
91: fprintf(rdf, "<RPM:Release>%s</RPM:Release>\n", rpm->release);
1.2 ! httpng 92: if (rpm->distribution)
! 93: fprintf(rdf, "<RPM:Distribution>%s</RPM:Distribution>\n",
! 94: rpm->distribution);
! 95: if (rpm->vendor)
! 96: fprintf(rdf, "<RPM:Vendor>%s</RPM:Vendor>\n", rpm->vendor);
! 97: fprintf(rdf, "<RPM:Size>%d</RPM:Size>\n", rpm->size);
! 98: if (rpm->url)
! 99: fprintf(rdf, "<RPM:URL>%s</RPM:URL>\n", rpm->url);
! 100: tstruct = localtime(&(rpm->date));
! 101: #ifdef HAVE_STRFTIME
! 102: strftime(buf, sizeof(buf) - 1, "%c", tstruct);
! 103: #else
! 104: #error "no strftime, please check !"
! 105: #endif
! 106: fprintf(rdf, "<RPM:BuildDate>%s</RPM:BuildDate>\n", buf);
! 107: if (rpm->host)
! 108: fprintf(rdf, "<RPM:BuildHost>%s</RPM:BuildHost>\n", rpm->host);
! 109: if (rpm->group)
! 110: fprintf(rdf, "<RPM:Group>%s</RPM:Group>\n", rpm->group);
! 111: if (rpm->packager)
! 112: fprintf(rdf, "<RPM:Packager>%s</RPM:Packager>\n", rpm->packager);
! 113: if (dir->ftpsrc) {
! 114: fprintf(rdf, "<RPM:Sources>%s/%s</RPM:Sources>\n",
! 115: dir->ftpsrc, rpm->srcrpm);
! 116: } else {
! 117: fprintf(rdf, "<RPM:Sources>%s</RPM:Sources>\n",
! 118: rpm->srcrpm);
! 119: }
! 120: if (rpm->summary)
! 121: fprintf(rdf, "<RPM:Summary>%s</RPM:Summary>\n", rpm->summary);
! 122: if (rpm->description)
! 123: fprintf(rdf, "<RPM:Description>\n%s\n</RPM:Description>\n",
! 124: rpm->description);
! 125: if (rpm->copyright)
! 126: fprintf(rdf, "<RPM:Copyright>%s</RPM:Copyright>\n",
! 127: rpm->copyright);
! 128: if (rpm->nb_resources > 0) {
! 129: fprintf(rdf, "<RPM:Provides>\n");
! 130: fprintf(rdf, "<RDF:Bag>\n");
! 131: for (i = 0;i < rpm->nb_resources;i++) {
! 132: fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",
! 133: rpm->resources[i]->name);
! 134: }
! 135: fprintf(rdf, "</RDF:Bag>\n");
! 136: fprintf(rdf, "</RPM:Provides>\n");
! 137: }
! 138: if (rpm->nb_requires > 0) {
! 139: fprintf(rdf, "<RPM:Requires>\n");
! 140: fprintf(rdf, "<RDF:Bag>\n");
! 141: for (i = 0;i < rpm->nb_requires;i++) {
! 142: fprintf(rdf, "<RPM:Resource>%s</RPM:Resource>\n",
! 143: rpm->requires[i]->name);
! 144: }
! 145: fprintf(rdf, "</RDF:Bag>\n");
! 146: fprintf(rdf, "</RPM:Requires>\n");
! 147: }
! 148: if (rpm->filelist)
! 149: fprintf(rdf, "<RPM:Files>\n%s\n</RPM:Files>\n", rpm->filelist);
1.1 httpng 150: fprintf(rdf, "</RDF:Description>\n");
151: fprintf(rdf, "</RDF:RDF>\n");
152: fclose(rdf);
153:
154: }
155:
Webmaster