/[magpie]/magpie/mod_xml.c
ViewVC logotype

Contents of /magpie/mod_xml.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (show annotations) (download) (vendor branch)
Fri Aug 1 00:11:20 2003 UTC (9 years, 9 months ago) by djpig-guest
Branch: djpig, MAIN
CVS Tags: upstream_version_0_6, debian_version_0_6, start, magpie_0_5_1_1, HEAD
Changes since 1.1: +0 -0 lines
File MIME type: text/plain
Import the source of 0.5.1-1
1 /*****
2 This module is similar to mod_core, but it kicks outs data in XML.
3 If you have an XSL browser, you should be able to read these files
4 directly.
5 *****/
6 static const char rcsid[] = "$Id: mod_xml.c,v 1.1.1.1 2003/08/01 00:11:20 djpig-guest Exp $";
7
8 #include <assert.h>
9 #include <stdio.h>
10 #include <string.h>
11 #include <unistd.h>
12 #include <stdlib.h>
13 #include <ctype.h>
14 #include <sys/wait.h>
15 #include "magpie.h"
16
17 #define OUTPUT_DIR "xml"
18 #define OUTPUT_FILE "xml/all.xml"
19
20 extern int mkdir (const char *, mode_t);
21
22 /* this is the dtd */
23 static const char dtd[] = "\
24 <!DOCTYPE magpie\n\
25 [\n\
26 <!ELEMENT magpie (package|target)* >\n\
27 \n\
28 <!ELEMENT target EMPTY>\n\
29 <!ATTLIST target name ID #REQUIRED>\n\
30 \n\
31 <!ELEMENT package\n\
32 (name?, version, maintainer, depends?, recommends?, suggests?, provides?, enhances?, filename?, size?, md5sum?, summary, description, installed-size?, source?, origin?, bugs?) >\n\
33 <!ATTLIST package\n\
34 name ID #REQUIRED\n\
35 section (main|contrib|non-free|non-us|local|affinity|alien) #REQUIRED\n\
36 priority (required|important|standard|optional|extra) #REQUIRED\n\
37 category (admin|base|comm|devel|doc|editors|electronics|games|graphics|hamradio|interpreters|libs|mail|math|misc|net|news|oldlibs|otherosfs|shells|sound|tex|text|utils|web|x11|science|unspecified) #IMPLIED\n\
38 essential (yes|no) #IMPLIED\n\
39 predepends IDREFS #IMPLIED\n\
40 depends IDREFS #IMPLIED\n\
41 suggests IDREFS #IMPLIED\n\
42 recommends IDREFS #IMPLIED\n\
43 provides IDREFS #IMPLIED\n\
44 enhances IDREFS #IMPLIED\n\
45 >\n\
46 \n\
47 <!ELEMENT maintainer (#PCDATA)>\n\
48 <!ELEMENT name (#PCDATA)>\n\
49 <!ELEMENT version (#PCDATA)>\n\
50 <!ELEMENT filename (#PCDATA)>\n\
51 <!ELEMENT depends (#PCDATA)>\n\
52 <!ELEMENT recommends (#PCDATA)>\n\
53 <!ELEMENT suggests (#PCDATA)>\n\
54 <!ELEMENT provides (#PCDATA)>\n\
55 <!ELEMENT size (#PCDATA)>\n\
56 <!ELEMENT md5sum (#PCDATA)>\n\
57 <!ELEMENT summary (#PCDATA)>\n\
58 <!ELEMENT description (#PCDATA)>\n\
59 <!ELEMENT installed-size (#PCDATA)>\n\
60 <!ELEMENT source (#PCDATA)>\n\
61 <!ELEMENT origin (#PCDATA)>\n\
62 <!ELEMENT bugs (#PCDATA)>\n\
63 \n\
64 <!ENTITY lt '<'>\n\
65 <!ENTITY gt '>'>\n\
66 <!ENTITY amp '&'>\n\
67 ]>\n";
68
69 static const char pseudotargets[] = "\
70 <!--\n\
71 these targets are currently hardcoded (*ugh*), but it's a necessary\n\
72 stopgap measure until we generate them automatically.\n\
73 -->\n";
74
75 static const char *targets[] = {
76 "9fonts",
77 "ada-rm",
78 "ale-clone-data",
79 "alias",
80 "alsadriver",
81 "alsalib",
82 "alsalib-dev",
83 "alsaplayer-output",
84 "aolserver",
85 "asis",
86 "asis-runtime",
87 "atlas-dev",
88 "awe-patch",
89 "awe-utils",
90 "awk",
91 "base",
92 "bibtex",
93 "binutils-m68k-palmos-coff",
94 "bnlib-dev",
95 "browser-45",
96 "c++-compiler",
97 "c-compiler",
98 "c-shell",
99 "cdgrab",
100 "cfontsdeb",
101 "chill-compiler",
102 "ckermit",
103 "communicator-browser-408",
104 "communicator-browser-461",
105 "communicator-browser-47",
106 "communicator-spell-408",
107 "console-tools-data",
108 "console-utilities",
109 "cplaindeb",
110 "csfontsdeb",
111 "cslatexdeb",
112 "csplaindeb",
113 "ctags",
114 "cupsys-dev",
115 "darxite-client",
116 "darxite-monitor",
117 "data-dumper",
118 "delimmatch",
119 "device3dfx-module",
120 "dhcpd",
121 "diskless-image",
122 "docbk-xml",
123 "docbook-to-man-ans",
124 "doom-engine",
125 "doom-wad",
126 "doom-wad-editor",
127 "dotfile-module",
128 "dvips",
129 "dvipsk",
130 "dvipsk-ja",
131 "e2fslibsg",
132 "e2p-dev",
133 "editor",
134 "egcc",
135 "elf-binutils",
136 "elf-libgdbm",
137 "elm",
138 "emacs-dl-canna",
139 "emacs-dl-wnn",
140 "emacsen",
141 "emusic",
142 "enlightenment-theme",
143 "epic4-script",
144 "erlang-dev",
145 "etags",
146 "ex2fs-dev",
147 "expect",
148 "expect-dev",
149 "expectk",
150 "ext2fs-dev",
151 "ezmlm-idx",
152 "festvox-16k",
153 "festvox-8k",
154 "fortify-linux-ppc",
155 "fortify-os2",
156 "fortify-unix-mips",
157 "fortify-unix-sparc",
158 "fortify-unix-x86",
159 "fortify-win32",
160 "fortran77-compiler",
161 "fortune",
162 "fortune-cookie-db",
163 "freeciv-client",
164 "ftape-module",
165 "ftp-server",
166 "fvwm2",
167 "gap4",
168 "gas",
169 "gcc-m68k-palmos-coff",
170 "gdb-m68k-palmos-coff",
171 "gdk-imlib",
172 "gdk-imlib-development",
173 "ghostscript",
174 "giflib-dev",
175 "gimp-data-min",
176 "glibc-pic",
177 "gltt2",
178 "gltt2-dev",
179 "glut-dev",
180 "gmt-coastline-data",
181 "gnupg",
182 "gpg-rsa",
183 "gpg-rsaref",
184 "gs-pdfencrypt",
185 "gstep-base",
186 "gstep-base-dbg",
187 "gstep-base-dev",
188 "gstep-gui-dev",
189 "gstep-xgps",
190 "gstep-xgps-dev",
191 "gtkicq",
192 "guile",
193 "honyaku-damashii-server",
194 "honyakudamashii-server",
195 "httpd",
196 "hugs98",
197 "hylafax-client",
198 "hztty",
199 "ident-server",
200 "ifcico-cm",
201 "ilu",
202 "imap-client",
203 "imap-server",
204 "imap-serverdoc",
205 "imlib",
206 "imlib-development",
207 "info-browser",
208 "intlfonts-chinese",
209 "intlfonts-european",
210 "intlfonts-japanese",
211 "io",
212 "irc",
213 "ircii",
214 "ish",
215 "ispell-dictionary",
216 "itcl-dev",
217 "itclsh",
218 "itk-dev",
219 "itkwish",
220 "iwidgets-dev",
221 "java-compiler",
222 "java-virtual-machine",
223 "jcodepl",
224 "jdk-common",
225 "jdk1.1-runtime",
226 "jdk1.2",
227 "kakasi-dev",
228 "kernel-headers",
229 "kernel-image",
230 "kernel-image-2.0.35",
231 "kernel-patch-kdb",
232 "kernel-source",
233 "kinput2",
234 "knfs",
235 "komirr",
236 "kpilot",
237 "lam-dev",
238 "lambdamoo-core",
239 "lambdamoo-server",
240 "latex",
241 "ldap-server",
242 "ldconfig",
243 "lg-issue",
244 "lib-fesi-java",
245 "libapache-mod-auth-sys",
246 "libapache-mod-python",
247 "libapache-mod-put",
248 "libapache-mod-roaming",
249 "libapache-mod-ssl",
250 "libapt-pkg2.6",
251 "libart-pkg2.6",
252 "libasound0",
253 "libawe-dev",
254 "libbfd-dev",
255 "libc-dev",
256 "libc-doc",
257 "libc-pic",
258 "libc6.1",
259 "libcomerr2",
260 "libcq-plugin",
261 "libdbd-msql-perl",
262 "libdl1",
263 "libe2p2",
264 "libeb",
265 "libeb-deb",
266 "libeb-dev",
267 "libext2fs",
268 "libext2fs2",
269 "libfreecdb-dev",
270 "libg++",
271 "libg++-dev",
272 "libgc-dev",
273 "libgcj-dev",
274 "libgd-dev",
275 "libgdk-imlib1",
276 "libgg-dev",
277 "libgg0",
278 "libgg0-dev",
279 "libggi-dev",
280 "libggi-doc",
281 "libggi-target",
282 "libgii-dev",
283 "libgl-dev",
284 "libgl1",
285 "libglade-dev",
286 "libglade-gnome-dev",
287 "libglib-dev",
288 "libglib1.1-dev",
289 "libglide-dev",
290 "libglide2",
291 "libgtk1.1-dev",
292 "libgtkgl-dev",
293 "libguile3",
294 "libguile4",
295 "libguile4-dev",
296 "libid3-dev",
297 "libimlib1",
298 "libjpeg-dev",
299 "libjpeg-gif",
300 "libjpeg6b",
301 "libjsw1",
302 "liblam",
303 "libmbonecommon",
304 "libmbonecommon-dev",
305 "libmd5-perl",
306 "libmikmod-dev",
307 "libmm-dev",
308 "libmsql2",
309 "libncurses-dev",
310 "libnet",
311 "libnet-dev",
312 "libopenldap1-dev",
313 "libpam-dev",
314 "libpam-mkhomedir",
315 "libpam-motd",
316 "libpng-dev",
317 "libproplist-dev",
318 "libreadline-dbg",
319 "libreadline-dev",
320 "libreadline-doc",
321 "librrds-perl",
322 "libsmi-dev",
323 "libsnmp",
324 "libsnmp-dev",
325 "libss2",
326 "libstdc++-dev",
327 "libtclobjc",
328 "libtermreadkey-perl",
329 "libtiff-dev",
330 "libtsp-dev",
331 "libucl-common",
332 "libucl-common-dev",
333 "libuuid1",
334 "libwmaker-dev",
335 "libwrap-dev",
336 "libwraster-dev",
337 "libxml0",
338 "libxmlo",
339 "libxmpi",
340 "libxpm4",
341 "libxpm4-dev",
342 "libz-dev",
343 "libz1",
344 "licq-plugin",
345 "linuxdoc-sgml",
346 "lisp-compiler",
347 "lisp-core",
348 "lm-sensors-doc",
349 "lm-sensors-mod",
350 "lpd",
351 "lsof",
352 "ltxgraph",
353 "mail-reader",
354 "mail-transport-agent",
355 "mail-user-agent",
356 "man",
357 "man-browser",
358 "metafont",
359 "modules",
360 "mpi",
361 "mule2",
362 "multiarch-binutils",
363 "nat",
364 "navigator-browser-408",
365 "navigator-browser-461",
366 "navigator-browser-47",
367 "navigator-smotif-45",
368 "navigator-spellchk-408",
369 "ncbi-tools-dev",
370 "ncurses-dev",
371 "ncurses-runtime",
372 "netcdf",
373 "netcdfg",
374 "netscape-browser-408",
375 "netscape-browser-461",
376 "netscape-browser-47",
377 "news-reader",
378 "news-transport-system",
379 "nntpcache-doc",
380 "objc-compiler",
381 "offix-editor",
382 "offix-files",
383 "open",
384 "palmpython",
385 "pam-doc",
386 "pascal-compiler",
387 "pbmplus",
388 "pcmcia-modules",
389 "pdf-viewer",
390 "perl-curses",
391 "perl-doc",
392 "perl5",
393 "perl5-base",
394 "perl5-suid",
395 "perl5-thread",
396 "pgp",
397 "pgp-i",
398 "pgp5",
399 "php3-cgi-database",
400 "php3-database",
401 "php3-msql",
402 "picons",
403 "pike-crypto",
404 "pine",
405 "pop2-server",
406 "pop3-server",
407 "popclient",
408 "postscript-preview",
409 "postscript-viewer",
410 "ppmtoagafb",
411 "ptex-base",
412 "pw",
413 "python",
414 "python-bsddb",
415 "python-curses",
416 "python-misc",
417 "python-net",
418 "qmail",
419 "qt2-dev",
420 "quake",
421 "radiusd",
422 "ratfor77",
423 "rgrep",
424 "rvplayer",
425 "rx1g",
426 "rx1g-dev",
427 "scalapack-mpi",
428 "scalapack-pvm",
429 "scalapack1-lam-test",
430 "sdr",
431 "serialmail",
432 "siag",
433 "slang-dev",
434 "slang-dev6",
435 "slang-pic",
436 "squake",
437 "ssh-askpass",
438 "svgalib1-bin",
439 "syslogd",
440 "tcd",
441 "tcl-dev",
442 "tcl-doc",
443 "tcl76",
444 "tclsh",
445 "tclx-dev",
446 "tclx80",
447 "telnet98",
448 "tex",
449 "timedate",
450 "tinytable-zope",
451 "tip",
452 "tix",
453 "tix-dev",
454 "tk-dev",
455 "tk-doc",
456 "tk42",
457 "tkman",
458 "tm",
459 "toshiba-fan",
460 "toshiba-hotkey",
461 "tpctl-modules",
462 "tput",
463 "translation-dictionary",
464 "troffcnv",
465 "tyvis-dev",
466 "ucspi-tcp",
467 "ups-monitor",
468 "userlink",
469 "vflib",
470 "virtual-mysql-server",
471 "vncviewer",
472 "vrml-browser",
473 "w3-el",
474 "watch",
475 "web-browser",
476 "wish",
477 "wmaker-gnome",
478 "wmaker-plain",
479 "wmaker-usersguide",
480 "wnn",
481 "wnn6",
482 "wordlist",
483 "www-browser",
484 "www-search",
485 "x-terminal-emulator",
486 "x-window-manager",
487 "xarchon-theme",
488 "xcoral-doc",
489 "xdvi",
490 "xemacs19",
491 "xemacs20",
492 "xfnt100",
493 "xfnt75",
494 "xfntbase",
495 "xfntbig",
496 "xfntbig5-cmex24m",
497 "xfntbig5p-cmex24m",
498 "xfntcyr",
499 "xfntpex",
500 "xfntscl",
501 "xfonts-biznet-iso-8859-base",
502 "xfonts-johab",
503 "xforms0.86",
504 "xmhtml-dev",
505 "xmodmap",
506 "xmpi",
507 "xmpi-dev",
508 "xmpi-runtime",
509 "xpilot-client",
510 "xquake",
511 "xserver",
512 "xshipwars-images",
513 "xshipwars-sounds",
514 "xswallow",
515 "xvile",
516 "zcode-game",
517 "zcode-interpreter",
518 "zip-crypt"
519 };
520
521
522 /*+
523 Quote any text which is written into an 'attribute'.
524 +*/
525 static void xml_quote_attribute (FILE *fp, const char *p)
526 {
527 char ch;
528
529 assert (p);
530 fputs ("\"", fp);
531 while ((ch = *p++)) {
532 switch (ch) {
533 case '<': fputs ("&lt;", fp); break;
534 case '>': fputs ("&gt;", fp); break;
535 case '&': fputs ("&amp;", fp); break;
536 case '\'': fputs ("&apos;", fp); break;
537 case '\"': fputs ("&quot;", fp); break;
538 default: fputc (ch, fp);
539 }
540 }
541 fputs ("\"", fp);
542 }
543
544 /*+
545 Quote any text which is written into a 'data' section.
546 +*/
547 static void xml_quote_data (FILE *fp, const char *p)
548 {
549 char ch;
550
551 assert (p);
552 while ((ch = *p++)) {
553 switch (ch) {
554 case '<': fputs ("&lt;", fp); break;
555 case '>': fputs ("&gt;", fp); break;
556 case '&': fputs ("&amp;", fp); break;
557 default: fputc (ch, fp);
558 }
559 }
560 }
561
562 /*+
563 Quote any text which is written into an 'id' attribute.
564 +*/
565 static void xml_quote_id (FILE *fp, const char *p)
566 {
567 char ch;
568
569 assert (p);
570
571 if (isdigit (*p))
572 fputc ('N', fp);
573
574 while ((ch = *p++)) {
575 switch (ch) {
576 case '+':
577 if (*p == '+') {
578 fputs (".plusplus.", fp);
579 p++;
580 }
581 else
582 fputs (".and.", fp); break;
583 break;
584 default:
585 fputc (ch, fp);
586 }
587 }
588 }
589
590 /*+
591 +*/
592 static void xml_quote_ids (FILE *fp, struct package_list *d)
593 {
594 struct package_list *q;
595
596 fputc ('"', fp);
597 while (d) {
598 xml_quote_id (fp, d->name);
599 if (d->down) {
600 q = d->down;
601 while (q) {
602 fputc (' ', fp);
603 xml_quote_id (fp, q->name);
604 q = q->next;
605 }
606 }
607 d = d->next;
608 if (d)
609 fputc (' ', fp);
610 }
611 fputc ('"', fp);
612 }
613
614
615 /*+
616 Quote the 'description' field.
617 +*/
618 static void put_description (FILE *fp, struct package_info *p)
619 {
620 int i;
621 fprintf (fp, " <description>\n");
622 for (i = 0; i < p->desccnt; i++) {
623 fprintf (fp, " ");
624 xml_quote_data (fp, p->description[i]);
625 fprintf (fp, "\n");
626 }
627 fprintf (fp, " </description>\n");
628 }
629
630 /*+
631 Put a simple "name:value" pair.
632 +*/
633 static void xml_name_value (FILE *fp, const char *name, const char *value)
634 {
635 if (!value || value[0] == '\0')
636 return;
637
638 if (2 * strlen (name) + strlen (value) < 78) {
639 fprintf (fp, " ");
640 fprintf (fp, "<%s>", name);
641 xml_quote_data (fp, value);
642 fprintf (fp, "</%s>", name);
643 fprintf (fp, "\n");
644 }
645 else {
646 fprintf (fp, " <%s>\n", name);
647 fprintf (fp, " ");
648 xml_quote_data (fp, value);
649 fprintf (fp, "\n");
650 fprintf (fp, " </%s>\n", name);
651 }
652 }
653
654
655 /*+
656 +*/
657 static void put_list (FILE *fp, const char *name, struct package_list *d)
658 {
659 struct package_list *q;
660 const char *fmt;
661
662 fprintf (fp, " <%s>", name);
663 while (d) {
664 fmt = (d->restriction) ? "%s %s" : "%s";
665 fprintf (fp, fmt, d->name, d->restriction);
666
667 if (d->down) {
668 q = d->down;
669 while (q) {
670 fputs (" | ", fp);
671 fmt = (q->restriction) ? "%s %s" : "%s";
672 fprintf (fp, fmt, q->name, q->restriction);
673 q = q->down;
674 }
675 }
676 d = d->next;
677 if (d)
678 fputs (", ", fp);
679 }
680 fprintf (fp, "</%s>\n", name);
681 }
682
683
684 /*+
685 Write the XML information about a single package.
686 +*/
687 static void put_package (FILE *fp, struct package_info *p)
688 {
689 fprintf (fp, "<package name=");
690 fputc ('"', fp);
691 xml_quote_id (fp, p->name);
692 fputc ('"', fp);
693
694 if (strcmp (sections[p->section], "non-US") == 0) {
695 fprintf (fp, " section=%s priority=%s",
696 sections[p->section], priorities[p->priority]);
697 }
698 else {
699 fprintf (fp, " section=%s category=%s priority=%s",
700 sections[p->section], categories[p->category],
701 priorities[p->priority]);
702 }
703 if (p->essential)
704 fprintf (fp, " essential=yes");
705 #if 0
706 if (p->installed)
707 fprintf (fp, " installed");
708 if (p->unpacked)
709 fprintf (fp, " unpacked");
710 #endif
711 if (p->predepends) {
712 fprintf (fp, "\n predepends=");
713 xml_quote_ids (fp, p->predepends);
714 }
715 if (p->depends) {
716 fprintf (fp, "\n depends=");
717 xml_quote_ids (fp, p->depends);
718 }
719 if (p->suggests) {
720 fprintf (fp, "\n suggests=");
721 xml_quote_ids (fp, p->suggests);
722 }
723 if (p->recommends) {
724 fprintf (fp, "\n recommends=");
725 xml_quote_ids (fp, p->recommends);
726 }
727 if (p->provides) {
728 fprintf (fp, "\n provides=");
729 xml_quote_ids (fp, p->provides);
730 }
731 if (p->enhances) {
732 fprintf (fp, "\n enhances=");
733 xml_quote_ids (fp, p->enhances);
734 }
735 fprintf (fp, ">\n");
736
737 xml_name_value (fp, "name", p->name);
738 xml_name_value (fp, "version", p->version);
739 xml_name_value (fp, "maintainer", p->maintainer);
740
741 if (p->depends)
742 put_list (fp, "depends", p->depends);
743 if (p->recommends)
744 put_list (fp, "recommends", p->recommends);
745 if (p->suggests)
746 put_list (fp, "suggests", p->suggests);
747 if (p->provides)
748 put_list (fp, "provides", p->provides);
749 if (p->enhances)
750 put_list (fp, "enhances", p->enhances);
751
752 xml_name_value (fp, "filename", p->filename);
753 fprintf (fp, " <size>%ld</size>\n", p->size);
754 xml_name_value (fp, "md5sum", p->md5sum);
755
756 xml_name_value (fp, "summary", p->summary);
757 put_description (fp, p);
758
759 if (p->installed_size)
760 fprintf (fp, " <installed-size>%ld</installed-size>\n",
761 p->installed_size);
762 if (p->source)
763 put_list (fp, "source", p->source);
764
765 if (p->origin)
766 xml_name_value (fp, "origin", p->origin);
767
768 if (p->bugs)
769 xml_name_value (fp, "bugs", p->bugs);
770
771 fprintf (fp, "</package>\n");
772 fprintf (fp, "\n");
773 }
774
775
776 /*+
777 Create basic XML documents
778 +*/
779 static int xml_init (void)
780 {
781 FILE *fp;
782 int i, j;
783 struct package_info *p;
784 char pathname[256];
785
786 mkdir (OUTPUT_DIR, 0755);
787
788 fp = fopen (OUTPUT_FILE, "w");
789 fprintf (fp, dtd);
790 fprintf (fp, "\n");
791 fprintf (fp, "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n");
792 fprintf (fp, "\n");
793 fprintf (fp, "<!-- all content -->\n");
794 fprintf (fp, "\n");
795 fprintf (fp, "<magpie>\n");
796
797 fprintf (fp, "\n");
798 for (i = 0; i < cachecnt; i++) {
799 p = cache[i];
800
801 put_package (fp, p);
802 }
803
804 fprintf (fp, "\n");
805 fprintf (fp, pseudotargets);
806 for (i = 0; i < sizeof targets / sizeof targets[0]; i++) {
807 fprintf (fp, "<target name=\"");
808 xml_quote_id (fp, targets[i]);
809 fputs ("\">\n", fp);
810 }
811
812 fprintf (fp, "</magpie>\n");
813 fclose (fp);
814 gzip (OUTPUT_FILE);
815
816 /*
817 * Also dump some individual files as well
818 */
819 for (j = 0; j < CNT_SECTIONS && j < 5; j++) {
820 sprintf (pathname, "%s/%s.xml", OUTPUT_DIR, sections[j]);
821 fp = fopen (pathname, "w");
822
823 fprintf (fp, dtd);
824 fprintf (fp, "\n");
825 fprintf (fp,
826 "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n");
827 fprintf (fp, "\n");
828 fprintf (fp, "<!-- section '%s' only -->\n", sections[j]);
829 fprintf (fp, "\n");
830 fprintf (fp, "<magpie>\n");
831
832 fprintf (fp, "\n");
833 for (i = 0; i < cachecnt; i++) {
834 p = cache[i];
835 if (p->section != j)
836 continue;
837
838 put_package (fp, p);
839 }
840 fprintf (fp, "</magpie>\n");
841 fclose (fp);
842 gzip (pathname);
843 }
844
845 for (j = 0; j < CNT_PRIORITIES; j++) {
846 sprintf (pathname, "%s/%s.xml", OUTPUT_DIR, priorities[j]);
847 fp = fopen (pathname, "w");
848
849 fprintf (fp, dtd);
850 fprintf (fp, "\n");
851 fprintf (fp,
852 "<?xml version='1.0' encoding='UTF-8' standalone='yes'?>\n");
853 fprintf (fp, "\n");
854 fprintf (fp, "<!-- priority '%s' only -->\n", priorities[j]);
855 fprintf (fp, "\n");
856 fprintf (fp, "<magpie>\n");
857
858 fprintf (fp, "\n");
859 for (i = 0; i < cachecnt; i++) {
860 p = cache[i];
861 if (p->priority != j)
862 continue;
863
864 put_package (fp, p);
865 }
866 fprintf (fp, "</magpie>\n");
867 fclose (fp);
868 gzip (pathname);
869 }
870
871 return 0;
872 }
873
874
875 struct magpie_module mod_core_xml = {
876 version : MAGPIE_VERSION,
877 description : "core module (XML version)",
878 init : xml_init
879 };

  ViewVC Help
Powered by ViewVC 1.1.5