Add error messages in case of signature error
[oweals/opkg-lede.git] / libopkg / pkg_parse.c
index 0bb4433c8d85229fff4a6ab15bea0007359e9d93..a588e180eba67cbea2e4305a68b9645cf2d6e37b 100644 (file)
@@ -1,4 +1,4 @@
-/* pkg_parse.c - the itsy package management system
+/* pkg_parse.c - the opkg package management system
 
    Steven M. Ayer
    
@@ -15,7 +15,7 @@
    General Public License for more details.
 */
 
-#include "opkg.h"
+#include "includes.h"
 #include <errno.h>
 #include <ctype.h>
    
@@ -105,9 +105,7 @@ void parseConffiles(pkg_t * pkg, char * raw)
 int parseVersion(pkg_t *pkg, char *raw)
 {
   char *colon, *eepochcolon;
-#ifdef USE_DEBVERSION
   char *hyphen;
-#endif
   unsigned long epoch;
 
   if (!*raw) {
@@ -140,41 +138,24 @@ int parseVersion(pkg_t *pkg, char *raw)
   }
 
   pkg->revision = "";
-  pkg->familiar_revision = "";
 
-  pkg->version= malloc(strlen(raw)+1);
+  if (!pkg->version)
+  {
+  pkg->version= calloc(1, strlen(raw)+1);
   if ( pkg->version == NULL ) {
      fprintf(stderr, "%s: out of memory \n", __FUNCTION__);
      return ENOMEM;
   }
   strcpy(pkg->version, raw);
+  }
 
-#ifdef USE_DEBVERSION
   hyphen= strrchr(pkg->version,'-');
 
   if (hyphen) {
     *hyphen++= 0;
-    if (strncmp("fam", hyphen, 3) == 0) {
-      pkg->familiar_revision=hyphen+3;
-      hyphen= strrchr(pkg->version,'-');
-      if (hyphen) {
-       *hyphen++= 0;
-       pkg->revision = hyphen;
-      }
-    } else {
       pkg->revision = hyphen;
-    }
   }
-#endif
 
-/*
-  fprintf(stderr,"Parsed version: %lu, %s, %s, %s\n",
-         pkg->epoch,
-         pkg->version,
-         pkg->revision,
-         pkg->familiar_revision);
-*/
-         
   return 0;
 }
 
@@ -249,7 +230,7 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
                pkg->priority = parseGenericFieldType("Priority", *lines);
            else if(isGenericFieldType("Provides", *lines)){
 /* Here we add the internal_use to align the off by one problem between provides_str and provides */
-               provide = (char * ) malloc(strlen(*lines)+ 35 ); /* Preparing the space for the new opkg_internal_use_only */
+               provide = (char * ) calloc(1, strlen(*lines)+ 35 ); /* Preparing the space for the new opkg_internal_use_only */
                if ( alterProvidesLine(*lines,provide) ){
                    return EINVAL;
                }
@@ -285,6 +266,10 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
        case 'S':
            if(isGenericFieldType("Section:", *lines))
                pkg->section = parseGenericFieldType("Section", *lines);
+#ifdef HAVE_SHA256
+           else if(isGenericFieldType("SHA256sum:", *lines))
+               pkg->sha256sum = parseGenericFieldType("SHA256sum", *lines);
+#endif
            else if(isGenericFieldType("Size:", *lines))
                pkg->size = parseGenericFieldType("Size", *lines);
            else if(isGenericFieldType("Source:", *lines))
@@ -295,6 +280,11 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
                pkg->suggests_str = parseDependsString(*lines, &pkg->suggests_count);
            break;
 
+       case 'T':
+           if(isGenericFieldType("Tags:", *lines))
+               pkg->tags = parseGenericFieldType("Tags", *lines);
+           break;
+
        case 'M':
            if(isGenericFieldType("MD5sum:", *lines))
                pkg->md5sum = parseGenericFieldType("MD5sum", *lines);
@@ -312,6 +302,7 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
            else if(isGenericFieldType("Installed-Time:", *lines)) {
                char *time_str = parseGenericFieldType("Installed-Time", *lines);
                pkg->installed_time = strtoul(time_str, NULL, 0);
+               free (time_str);
            }       
            break;
 
@@ -382,9 +373,13 @@ int pkg_parse_raw(pkg_t *pkg, char ***raw, pkg_src_t *src, pkg_dest_t *dest)
 out:;
     
     *raw = lines;
-/* If the ipk has not a Provides line, we insert our false line */ 
+/* If the opk has not a Provides line, we insert our false line */ 
     if ( pkg_false_provides==1)
-       pkg->provides_str = parseDependsString ((char *)"Provides: opkg_internal_use_only ", &pkg->provides_count);
+    {
+       pkg->provides_count = 1;
+       pkg->provides_str = calloc (1, sizeof (char*));
+       pkg->provides_str[0] = strdup ("opkg_internal_use_only");
+    }
 
     if (pkg->name) {
        return 0;