libopkg: drop support for Release files
authorJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:40:04 +0000 (10:40 +0100)
committerJo-Philipp Wich <jo@mein.io>
Fri, 10 Feb 2017 09:40:04 +0000 (10:40 +0100)
Remove support for Release files as this facility is unused in LEDE/OpenWrt.
Removing this allows us to shrink the opkg executable a little bit.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
libopkg/Makefile.am
libopkg/cksum_list.c [deleted file]
libopkg/cksum_list.h [deleted file]
libopkg/opkg_cmd.c
libopkg/pkg_hash.c
libopkg/release.c [deleted file]
libopkg/release.h [deleted file]
libopkg/release_parse.c [deleted file]
libopkg/release_parse.h [deleted file]

index d536c5e..851cc8e 100644 (file)
@@ -15,7 +15,6 @@ opkg_cmd_sources = opkg_cmd.c opkg_cmd.h \
                   opkg_upgrade.c opkg_upgrade.h \
                   opkg_remove.c opkg_remove.h
 opkg_db_sources = opkg_conf.c opkg_conf.h \
-                 release.c release.h release_parse.c release_parse.h \
                  opkg_utils.c opkg_utils.h pkg.c pkg.h hash_table.h \
                  pkg_depends.c pkg_depends.h pkg_extract.c pkg_extract.h \
                  hash_table.c pkg_hash.c pkg_hash.h pkg_parse.c pkg_parse.h \
@@ -28,7 +27,6 @@ opkg_list_sources = conffile.c conffile.h conffile_list.c conffile_list.h \
                    active_list.c active_list.h list.h 
 opkg_util_sources = file_util.c file_util.h opkg_message.h opkg_message.c md5.c md5.h \
                    parse_util.c parse_util.h \
-                   cksum_list.c cksum_list.h \
                    sprintf_alloc.c sprintf_alloc.h \
                    xregex.c xregex.h xsystem.c xsystem.h
 if HAVE_PATHFINDER
diff --git a/libopkg/cksum_list.c b/libopkg/cksum_list.c
deleted file mode 100644 (file)
index d17151d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/* cksum_lis.c - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-
-#include "cksum_list.h"
-#include "libbb/libbb.h"
-
-
-int cksum_init(cksum_t *cksum, char **itemlist)
-{
-    cksum->value = xstrdup(*itemlist++);
-    cksum->size = atoi(*itemlist++);
-    cksum->name = xstrdup(*itemlist++);
-
-    return 0;
-}
-
-void cksum_deinit(cksum_t *cksum)
-{
-    free (cksum->name);
-    cksum->name = NULL;
-
-    free (cksum->value);
-    cksum->value = NULL;
-}
-
-void cksum_list_init(cksum_list_t *list)
-{
-    void_list_init((void_list_t *) list);
-}
-
-void cksum_list_deinit(cksum_list_t *list)
-{
-    cksum_list_elt_t *iter, *n;
-    cksum_t *cksum;
-
-    list_for_each_entry_safe(iter, n, &list->head, node) {
-      cksum = (cksum_t *)iter->data;
-      cksum_deinit(cksum);
-
-      /* malloced in cksum_list_append */
-      free(cksum);
-      iter->data = NULL;
-    }
-    void_list_deinit((void_list_t *) list);
-}
-
-cksum_t *cksum_list_append(cksum_list_t *list, char **itemlist)
-{
-    /* freed in cksum_list_deinit */
-    cksum_t *cksum = xcalloc(1, sizeof(cksum_t));
-    cksum_init(cksum, itemlist);
-
-    void_list_append((void_list_t *) list, cksum);
-
-    return cksum;
-}
-
-const cksum_t *cksum_list_find(cksum_list_t *list, const char *name)
-{
-     cksum_list_elt_t *iter;
-     cksum_t *cksum;
-
-     list_for_each_entry(iter, &list->head, node) {
-         cksum = (cksum_t *)iter->data;
-         if (strcmp(cksum->name, name) == 0) {
-              return cksum;
-         }
-     }    
-     return NULL;
-}
-
diff --git a/libopkg/cksum_list.h b/libopkg/cksum_list.h
deleted file mode 100644 (file)
index b752288..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* cksum_list.h - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#ifndef CKSUM_LIST_H
-#define CKSUM_LIST_H
-
-typedef struct 
-{
-  char *name;
-  char *value;
-  int size;
-} cksum_t;
-
-int cksum_init(cksum_t *cksum, char **itemlist);
-void cksum_deinit(cksum_t *cksum);
-
-#include "void_list.h"
-
-typedef struct void_list_elt cksum_list_elt_t;
-
-typedef struct void_list cksum_list_t;
-
-static inline int cksum_list_empty(cksum_list_t *list)
-{
-    return void_list_empty ((void_list_t *)list);
-}
-
-void cksum_list_init(cksum_list_t *list);
-void cksum_list_deinit(cksum_list_t *list);
-
-cksum_t *cksum_list_append(cksum_list_t *list, char **itemlist);
-const cksum_t *cksum_list_find(cksum_list_t *list, const char *name);
-
-#endif
index 04716fc..60ffee3 100644 (file)
@@ -27,7 +27,6 @@
 #include "opkg_conf.h"
 #include "opkg_cmd.h"
 #include "opkg_message.h"
-#include "release.h"
 #include "pkg.h"
 #include "pkg_dest.h"
 #include "pkg_parse.h"
@@ -114,39 +113,6 @@ opkg_update_cmd(int argc, char **argv)
      }
 
 
-     for (iter = void_list_first(&conf->dist_src_list); iter; iter = void_list_next(&conf->dist_src_list, iter)) {
-         char *url, *list_file_name;
-
-         src = (pkg_src_t *)iter->data;
-
-         sprintf_alloc(&url, "%s/dists/%s/Release", src->value, src->name);
-
-         sprintf_alloc(&list_file_name, "%s/%s", lists_dir, src->name);
-         err = opkg_download(url, list_file_name, NULL, NULL, 0);
-         if (!err) {
-              opkg_msg(NOTICE, "Downloaded release files for dist %s.\n",
-                           src->name);
-              release_t *release = release_new(); 
-              err = release_init_from_file(release, list_file_name);
-              if (!err) {
-                   if (!release_comps_supported(release, src->extra_data))
-                        err = -1;
-              }
-              if (!err) {
-                   err = release_download(release, src, lists_dir, tmp);
-              }
-              release_deinit(release); 
-              if (err)
-                   unlink(list_file_name);
-         }
-
-         if (err)
-              failures++;
-
-         free(list_file_name);
-         free(url);
-     }
-
      for (iter = void_list_first(&conf->pkg_src_list); iter; iter = void_list_next(&conf->pkg_src_list, iter)) {
          char *url, *list_file_name;
 
index 5f9a706..c6d7158 100644 (file)
@@ -18,7 +18,6 @@
 #include <stdio.h>
 
 #include "hash_table.h"
-#include "release.h"
 #include "pkg.h"
 #include "opkg_message.h"
 #include "pkg_vec.h"
@@ -184,40 +183,6 @@ pkg_hash_load_feeds(void)
        lists_dir = conf->restrict_to_default_dest ?
                conf->default_dest->lists_dir : conf->lists_dir;
 
-       for (iter = void_list_first(&conf->dist_src_list); iter;
-                       iter = void_list_next(&conf->dist_src_list, iter)) {
-
-               src = (pkg_src_t *)iter->data;
-
-               sprintf_alloc(&list_file, "%s/%s", lists_dir, src->name);
-
-               if (file_exists(list_file)) {
-                       int i;
-                       release_t *release = release_new();
-                       if(release_init_from_file(release, list_file)) {
-                               free(list_file);
-                               return -1;
-                       }
-
-                       unsigned int ncomp;
-                       const char **comps = release_comps(release, &ncomp);
-                       subdist = (pkg_src_t *) xmalloc(sizeof(pkg_src_t));
-                       memcpy(subdist, src, sizeof(pkg_src_t));
-
-                       for(i = 0; i < ncomp; i++){
-                               subdist->name = NULL;
-                               sprintf_alloc(&subdist->name, "%s-%s", src->name, comps[i]);
-                               if (dist_hash_add_from_file(lists_dir, subdist)) {
-                                       free(subdist->name); free(subdist);
-                                       free(list_file);
-                                       return -1;
-                               }
-                       }
-                       free(subdist->name); free(subdist);
-               }
-               free(list_file);
-       }
-
        for (iter = void_list_first(&conf->pkg_src_list); iter;
                        iter = void_list_next(&conf->pkg_src_list, iter)) {
 
diff --git a/libopkg/release.c b/libopkg/release.c
deleted file mode 100644 (file)
index 1b6e838..0000000
+++ /dev/null
@@ -1,342 +0,0 @@
-/* release.c - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#include <unistd.h>
-#include <ctype.h>
-
-#include "release.h"
-#include "opkg_utils.h"
-#include "libbb/libbb.h"
-
-#include "opkg_download.h"
-#include "sprintf_alloc.h"
-
-#include "release_parse.h"
-
-#include "parse_util.h"
-#include "file_util.h"
-
-static void
-release_init(release_t *release)
-{
-     release->name = NULL;
-     release->datestring = NULL;
-     release->architectures = NULL;
-     release->architectures_count = 0;
-     release->components = NULL;
-     release->components_count = 0;
-     release->complist = NULL;
-     release->complist_count = 0;
-}
-
-release_t *
-release_new(void)
-{
-     release_t *release;
-
-     release = xcalloc(1, sizeof(release_t));
-     release_init(release);
-
-     return release;
-}
-
-void
-release_deinit(release_t *release)
-{
-    int i;
-
-    free(release->name);
-    free(release->datestring);
-
-    for(i = 0; i < release->architectures_count; i++){
-       free(release->architectures[i]);
-    }
-    free(release->architectures);
-
-    for(i = 0; i < release->components_count; i++){
-       free(release->components[i]);
-    }
-    free(release->components);
-
-    for(i = 0; i < release->complist_count; i++){
-       free(release->complist[i]);
-    }
-    free(release->complist);
-
-}
-
-int
-release_init_from_file(release_t *release, const char *filename)
-{
-       int err = 0;
-       FILE *release_file;
-
-       release_file = fopen(filename, "r");
-       if (release_file == NULL) {
-               opkg_perror(ERROR, "Failed to open %s", filename);
-               return -1;
-       }
-
-       err=release_parse_from_stream(release, release_file);
-       if (!err) {
-               if (!release_arch_supported(release)) {
-                       opkg_msg(ERROR, "No valid architecture found on Release file.\n");
-                       err = -1;
-               }
-       }
-
-       return err;
-}
-
-const char *
-item_in_list(const char *comp, char **complist, const unsigned int count)
-{
-     int i;
-
-     if (!complist)
-         return comp;
-
-     for(i = 0; i < count; i++){
-         if (strcmp(comp, complist[i]) == 0)
-                   return complist[i];
-     }
-
-     return NULL;
-}
-
-int
-release_arch_supported(release_t *release)
-{
-     nv_pair_list_elt_t *l;
-
-     list_for_each_entry(l , &conf->arch_list.head, node) {
-         nv_pair_t *nv = (nv_pair_t *)l->data;
-         if (item_in_list(nv->name, release->architectures, release->architectures_count)) {
-              opkg_msg(DEBUG, "Arch %s (priority %s) supported for dist %s.\n",
-                              nv->name, nv->value, release->name);
-              return 1;
-         }
-     }
-
-     return 0;
-}
-
-int
-release_comps_supported(release_t *release, const char *complist)
-{
-     int ret = 1;
-     int i;
-
-     if (complist) {
-         release->complist = parse_list(complist, &release->complist_count, ' ', 1);
-         for(i = 0; i < release->complist_count; i++){
-              if (!item_in_list(release->complist[i], release->components, release->components_count)) {
-                   opkg_msg(ERROR, "Component %s not supported for dist %s.\n",
-                                   release->complist[i], release->name);
-                   ret = 0;
-              }
-         }
-     }
-
-     return ret;
-}
-
-const char **
-release_comps(release_t *release, unsigned int *count)
-{
-     char **comps = release->complist;
-
-     if (!comps) {
-         comps = release->components;
-         *count = release->components_count;
-     } else {
-         *count = release->complist_count;
-     }
-
-     return (const char **)comps;
-}
-
-int
-release_download(release_t *release, pkg_src_t *dist, char *lists_dir, char *tmpdir)
-{
-     int ret = 0;
-     unsigned int ncomp;
-     const char **comps = release_comps(release, &ncomp);
-     nv_pair_list_elt_t *l;
-     int i;
-
-     for(i = 0; i < ncomp; i++){
-         int err = 0;
-         char *prefix;
-
-         sprintf_alloc(&prefix, "%s/dists/%s/%s/binary", dist->value, dist->name,
-                       comps[i]);
-
-         list_for_each_entry(l , &conf->arch_list.head, node) {
-              char *url;
-              char *tmp_file_name, *list_file_name;
-              char *subpath = NULL;
-
-              nv_pair_t *nv = (nv_pair_t *)l->data;
-
-              sprintf_alloc(&list_file_name, "%s/%s-%s-%s", lists_dir, dist->name, comps[i], nv->name);
-
-              sprintf_alloc(&tmp_file_name, "%s/%s-%s-%s%s", tmpdir, dist->name, comps[i], nv->name, ".gz");
-
-              sprintf_alloc(&subpath, "%s/binary-%s/%s", comps[i], nv->name, dist->gzip ? "Packages.gz" : "Packages");
-
-              if (dist->gzip) {
-              sprintf_alloc(&url, "%s-%s/Packages.gz", prefix, nv->name);
-              err = opkg_download(url, tmp_file_name, NULL, NULL, 1);
-              if (!err) {
-                   err = release_verify_file(release, tmp_file_name, subpath);
-                   if (err) {
-                        unlink (tmp_file_name);
-                        unlink (list_file_name);
-                   }
-              }
-              if (!err) {
-                   FILE *in, *out;
-                   opkg_msg(NOTICE, "Inflating %s.\n", url);
-                   in = fopen (tmp_file_name, "r");
-                   out = fopen (list_file_name, "w");
-                   if (in && out) {
-                        err = unzip (in, out);
-                        if (err)
-                             opkg_msg(INFO, "Corrumpt file at %s.\n", url);
-                   } else
-                        err = 1;
-                   if (in)
-                        fclose (in);
-                   if (out)
-                        fclose (out);
-                   unlink (tmp_file_name);
-              }
-              free(url);
-              }
-
-              if (err) {
-                   sprintf_alloc(&url, "%s-%s/Packages", prefix, nv->name);
-                   err = opkg_download(url, list_file_name, NULL, NULL, 1);
-                   if (!err) {
-                        err = release_verify_file(release, tmp_file_name, subpath);
-                        if (err)
-                             unlink (list_file_name);
-                   }
-                   free(url);
-              }
-
-              free(tmp_file_name);
-              free(list_file_name);
-         }
-
-         if(err)
-              ret = 1;
-
-         free(prefix);
-     }
-
-     return ret;
-}
-
-int
-release_get_size(release_t *release, const char *pathname)
-{
-     const cksum_t *cksum;
-
-     if (release->md5sums) {
-         cksum = cksum_list_find(release->md5sums, pathname);
-         return cksum->size;
-     }
-
-#ifdef HAVE_SHA256
-     if (release->sha256sums) {
-         cksum = cksum_list_find(release->sha256sums, pathname);
-         return cksum->size;
-     }
-#endif
-
-     return -1;
-}
-
-const char *
-release_get_md5(release_t *release, const char *pathname)
-{
-     const cksum_t *cksum;
-
-     if (release->md5sums) {
-         cksum = cksum_list_find(release->md5sums, pathname);
-         return cksum->value;
-     }
-
-     return '\0';
-}
-
-#ifdef HAVE_SHA256
-const char *
-release_get_sha256(release_t *release, const char *pathname)
-{
-     const cksum_t *cksum;
-
-     if (release->sha256sums) {
-         cksum = cksum_list_find(release->sha256sums, pathname);
-         return cksum->value;
-     }
-
-     return '\0';
-}
-#endif
-
-int
-release_verify_file(release_t *release, const char* file_name, const char *pathname)
-{
-     struct stat f_info;
-     char *f_md5 = NULL;
-     const char *md5 = release_get_md5(release, pathname);
-#ifdef HAVE_SHA256
-     char *f_sha256 = NULL;
-     const char *sha256 = release_get_sha256(release, pathname);
-#endif
-     int ret = 0;
-
-     if (stat(file_name, &f_info) || (f_info.st_size!=release_get_size(release, pathname))) {
-         opkg_msg(ERROR, "Size verification failed for %s - %s.\n", release->name, pathname);
-         ret = 1;
-     } else {
-
-     f_md5 = file_md5sum_alloc(file_name);
-#ifdef HAVE_SHA256
-     f_sha256 = file_sha256sum_alloc(file_name);
-#endif
-
-     if (md5 && strcmp(md5, f_md5)) {
-         opkg_msg(ERROR, "MD5 verification failed for %s - %s.\n", release->name, pathname);
-         ret = 1;
-#ifdef HAVE_SHA256
-     } else if (sha256 && strcmp(sha256, f_sha256)) {
-         opkg_msg(ERROR, "SHA256 verification failed for %s - %s.\n", release->name, pathname);
-         ret = 1;
-#endif
-     }
-
-     }
-
-     free(f_md5);
-#ifdef HAVE_SHA256
-     free(f_sha256);
-#endif
-
-     return ret;
-}
diff --git a/libopkg/release.h b/libopkg/release.h
deleted file mode 100644 (file)
index 239dcca..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/* release.h - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#ifndef RELEASE_H
-#define RELEASE_H
-
-#include <stdio.h>
-#include "pkg.h"
-#include "cksum_list.h"
-
-struct release
-{
-     char *name;
-     char *datestring;
-     char **architectures;
-     unsigned int architectures_count;
-     char **components;
-     unsigned int components_count;
-     cksum_list_t *md5sums;
-#ifdef HAVE_SHA256
-     cksum_list_t *sha256sums;
-#endif
-     char **complist;
-     unsigned int complist_count;
-};
-
-typedef struct release release_t;
-
-release_t *release_new(void);
-void release_deinit(release_t *release);
-int release_init_from_file(release_t *release, const char *filename);
-
-int release_arch_supported(release_t *release);
-int release_comps_supported(release_t *release, const char *complist);
-int release_download(release_t *release, pkg_src_t *dist, char *lists_dir, char *tmpdir);
-
-const char **release_comps(release_t *release, unsigned int *count);
-
-int release_verify_file(release_t *release, const char *filename, const char *pathname);
-
-#endif
diff --git a/libopkg/release_parse.c b/libopkg/release_parse.c
deleted file mode 100644 (file)
index f411045..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-/* release_parse.c - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#include "config.h"
-
-#include <stdio.h>
-
-#include "release.h"
-#include "release_parse.h"
-#include "libbb/libbb.h"
-#include "parse_util.h"
-
-static int
-release_parse_line(void *ptr, const char *line, uint mask)
-{
-       release_t *release = (release_t *) ptr;
-
-       int ret = 0;
-       unsigned int count = 0;
-       char **list = 0;
-       static int reading_md5sums = 0;
-#ifdef HAVE_SHA256
-       static int reading_sha256sums = 0;
-#endif
-
-       switch (*line) {
-       case 'A':
-               if (is_field("Architectures", line)) {
-                       release->architectures = parse_list(line, &release->architectures_count, ' ', 0);
-               }
-               break;
-
-       case 'C':
-               if (is_field("Codename", line)) {
-                       release->name = parse_simple("Codename", line);
-               }
-               else if (is_field("Components", line)) {
-                       release->components = parse_list(line, &release->components_count, ' ', 0);
-               }
-               break;
-
-       case 'D':
-               if (is_field("Date", line)) {
-                       release->datestring = parse_simple("Date", line);
-               }
-               break;
-
-       case 'M':
-               if (is_field("MD5sum", line)) {
-                       reading_md5sums = 1;
-                       if (release->md5sums == NULL) {
-                            release->md5sums = xcalloc(1, sizeof(cksum_list_t));
-                            cksum_list_init(release->md5sums);
-                       }
-                       goto dont_reset_flags;
-               }
-               break;
-
-#ifdef HAVE_SHA256
-       case 'S':
-               if (is_field("SHA256", line)) {
-                       reading_sha256sums = 1;
-                       if (release->sha256sums == NULL) {
-                            release->sha256sums = xcalloc(1, sizeof(cksum_list_t));
-                            cksum_list_init(release->sha256sums);
-                       }
-                       goto dont_reset_flags;
-               }
-               break;
-#endif
-
-       case ' ':
-               if (reading_md5sums) {
-                       list = parse_list(line, &count, ' ', 1);
-                       cksum_list_append(release->md5sums, list);
-                       goto dont_reset_flags;
-               }
-#ifdef HAVE_SHA256
-               else if (reading_sha256sums) {
-                       list = parse_list(line, &count, ' ', 1);
-                       cksum_list_append(release->sha256sums, list);
-                       goto dont_reset_flags;
-               }
-#endif
-               break;
-
-       default:
-               ret = 1;
-       }
-
-       reading_md5sums = 0;
-#ifdef HAVE_SHA256
-       reading_sha256sums = 0;
-#endif
-
-dont_reset_flags:
-
-       return ret;
-}
-
-int
-release_parse_from_stream(release_t *release, FILE *fp)
-{
-       int ret;
-       char *buf;
-       const size_t len = 4096;
-
-       buf = xmalloc(len);
-       ret = parse_from_stream_nomalloc(release_parse_line, release, fp, 0, &buf, len);
-       free(buf);
-
-       return ret;
-}
-
diff --git a/libopkg/release_parse.h b/libopkg/release_parse.h
deleted file mode 100644 (file)
index 5840df6..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-/* release_parse.h - the opkg package management system
-
-   Copyright (C) 2010,2011 Javier Palacios
-
-   This program is free software; you can redistribute it and/or
-   modify it under the terms of the GNU General Public License as
-   published by the Free Software Foundation; either version 2, or (at
-   your option) any later version.
-
-   This program is distributed in the hope that it will be useful, but
-   WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   General Public License for more details.
-*/
-
-#ifndef RELEASE_PARSE_H
-#define RELEASE_PARSE_H
-
-int release_parse_from_stream(release_t *release, FILE *fp);
-
-#endif