unarchive: fix possible segmentation fault in deb_extract()
[oweals/opkg-lede.git] / tests / libopkg_test.c
index 70a924cb739615a6b6bfa4454e0d8bd8f3231566..0d6a703ea2764703420be21b4a5648c20ace99a8 100644 (file)
-#include <opkg.h>
-#include <stdlib.h>
 #include <stdio.h>
+#include <stdlib.h>
 #include <string.h>
 #include <libgen.h>
 
+#include <opkg.h>
+
+int opkg_state_changed;
 pkg_t *find_pkg = NULL;
 
-char *errors[10] = {
-  "No Error",
-  "Unknown Eror",
-  "Download failed",
-  "Dependancies failed",
-  "Package already installed",
-  "Package not available",
-  "Package not found",
-  "Package not installed",
-  "Signature check failed",
-  "MD5 sum failed"
-};
+#define TEST_PACKAGE "aspell"
 
+void progress_callback(const opkg_progress_data_t * progress, void *data)
+{
+       printf("\r%s %3d%%\n", (char *)data, progress->percentage);
+       fflush(stdout);
+}
 
-#define TEST_PACKAGE "aspell"
+static void list_pkg(pkg_t * pkg)
+{
+       char *v = pkg_version_str_alloc(pkg);
+       printf("%s - %s\n", pkg->name, v);
+       free(v);
+}
 
-void
-progress_callback (const opkg_progress_data_t *progress, void *data)
+void package_list_installed_callback(pkg_t * pkg, void *data)
 {
-  printf ("\r%s %3d%%", (char*) data, progress->percentage);
-  fflush (stdout);
+       if (pkg->state_status == SS_INSTALLED)
+               list_pkg(pkg);
 }
 
-void
-package_list_callback (pkg_t *pkg, void *data)
+void package_list_callback(pkg_t * pkg, void *data)
 {
-  static int install_count = 0;
-  static int total_count = 0;
+       static int install_count = 0;
+       static int total_count = 0;
 
-  if (pkg->state_status == SS_INSTALLED)
-    install_count++;
+       if (pkg->state_status == SS_INSTALLED)
+               install_count++;
 
-  total_count++;
+       total_count++;
 
-  printf ("\rPackage count: %d Installed, %d Total Available", install_count, total_count);
-  fflush (stdout);
+       printf("\rPackage count: %d Installed, %d Total Available",
+              install_count, total_count);
+       fflush(stdout);
 
-  if (!find_pkg)
-  {
-    /* store the first package to print out later */
-    find_pkg = pkg;
-  }
+       if (!find_pkg) {
+               /* store the first package to print out later */
+               find_pkg = pkg;
+       }
 }
 
-void
-package_list_upgradable_callback (pkg_t *pkg, void *data)
+void package_list_upgradable_callback(pkg_t * pkg, void *data)
 {
-  printf ("%s - %s\n", pkg->name, pkg->version);
+       list_pkg(pkg);
 }
 
-void
-print_package (pkg_t *pkg)
+void print_package(pkg_t * pkg)
 {
-  printf (
-      "Name:         %s\n"
-      "Version:      %s\n"
-      "Repository:   %s\n"
-      "Architecture: %s\n"
-      "Description:  %s\n"
-      "Tags:         %s\n"
-      "Size:         %ld\n"
-      "Status:       %d\n",
-      pkg->name,
-      pkg->version,
-      pkg->src->name,
-      pkg->architecture,
-      pkg->description,
-      pkg->tags,
-      pkg->size,
-      pkg->state_status
-      );
+       char *v = pkg_version_str_alloc(pkg);
+       const char *tags = pkg_get_string(pkg, PKG_TAGS);
+
+       printf("Name:         %s\n"
+              "Version:      %s\n"
+              "Repository:   %s\n"
+              "Architecture: %s\n"
+              "Description:  %s\n"
+              "Tags:         %s\n"
+              "Size:         %lu\n"
+              "Status:       %d\n",
+              pkg->name,
+              v,
+              pkg->src->name,
+              pkg_get_architecture(pkg),
+              pkg_get_string(pkg, PKG_DESCRIPTION),
+              tags ? tags : "",
+              (unsigned long) pkg_get_int(pkg, PKG_SIZE), pkg->state_status);
+       free(v);
 }
 
-
-void
-opkg_test (void)
+void opkg_test(void)
 {
-  int err;
-  pkg_t *pkg;
-
-  err = opkg_update_package_lists (progress_callback, "Updating...");
-  printf ("\nopkg_update_package_lists returned %d (%s)\n", err, errors[err]);
-
-  opkg_list_packages (package_list_callback, NULL);
-  printf ("\n");
-
-  if (find_pkg)
-  {
-    printf ("Finding package \"%s\"\n", find_pkg->name);
-    pkg = opkg_find_package (find_pkg->name, find_pkg->version, find_pkg->architecture, find_pkg->src->name);
-    if (pkg)
-    {
-      print_package (pkg);
-    }
-    else
-      printf ("Package \"%s\" not found!\n", find_pkg->name);
-  }
-  else
-    printf ("No package available to test find_package.\n");
-
-  err = opkg_install_package (TEST_PACKAGE, progress_callback, "Installing...");
-  printf ("\nopkg_install_package returned %d (%s)\n", err, errors[err]);
-
-  err = opkg_upgrade_package (TEST_PACKAGE, progress_callback, "Upgrading...");
-  printf ("\nopkg_upgrade_package returned %d (%s)\n", err, errors[err]);
-
-  err = opkg_remove_package (TEST_PACKAGE, progress_callback, "Removing...");
-  printf ("\nopkg_remove_package returned %d (%s)\n", err, errors[err]);
-
-  printf ("Listing upgradable packages...\n");
-  opkg_list_upgradable_packages (package_list_upgradable_callback, NULL);
-
-  err = opkg_upgrade_all (progress_callback, "Upgrading all...");
-  printf ("\nopkg_upgrade_all returned %d (%s)\n", err, errors[err]);
+       int err;
+       pkg_t *pkg;
+
+       err = opkg_update_package_lists(progress_callback, "Updating...");
+       printf("\nopkg_update_package_lists returned %d\n", err);
+
+       opkg_list_packages(package_list_callback, NULL);
+       printf("\n");
+
+       if (find_pkg) {
+               printf("Finding package \"%s\"\n", find_pkg->name);
+               pkg =
+                   opkg_find_package(find_pkg->name,
+                                     pkg_get_string(find_pkg, PKG_VERSION),
+                                     pkg_get_architecture(find_pkg),
+                                     find_pkg->src->name);
+               if (pkg) {
+                       print_package(pkg);
+               } else
+                       printf("Package \"%s\" not found!\n", find_pkg->name);
+       } else
+               printf("No package available to test find_package.\n");
+
+       err =
+           opkg_install_package(TEST_PACKAGE, progress_callback,
+                                "Installing...");
+       printf("\nopkg_install_package returned %d\n", err);
+
+       err =
+           opkg_upgrade_package(TEST_PACKAGE, progress_callback,
+                                "Upgrading...");
+       printf("\nopkg_upgrade_package returned %d\n", err);
+
+       err =
+           opkg_remove_package(TEST_PACKAGE, progress_callback, "Removing...");
+       printf("\nopkg_remove_package returned %d\n", err);
+
+       printf("Listing upgradable packages...\n");
+       opkg_list_upgradable_packages(package_list_upgradable_callback, NULL);
+
+       err = opkg_upgrade_all(progress_callback, "Upgrading all...");
+       printf("\nopkg_upgrade_all returned %d\n", err);
 
 }
 
-int
-main (int argc, char **argv)
+int main(int argc, char **argv)
 {
-  pkg_t *pkg;
-  int err;
-
-  if (argc < 2)
-  {
-    printf ("Usage: %s command\n"
-            "\nCommands:\n"
-           "\tupdate - Update package lists\n"
-           "\tfind [package] - Print details of the specified package\n"
-           "\tinstall [package] - Install the specified package\n"
-           "\tupgrade [package] - Upgrade the specified package\n"
-           "\tlist upgrades - List the available upgrades\n"
-           "\tlist all - List all available packages\n"
-           "\tlist installed - List all the installed packages\n"
-           "\tremove [package] - Remove the specified package\n"
-           "\trping - Reposiroties ping, check the accessibility of repositories\n"
-           "\ttest - Run test script\n"
-    , basename (argv[0]));
-    exit (0);
-  }
-
-  setenv("OFFLINE_ROOT", "/tmp", 0);
-  if (opkg_new ()) {
-         printf("opkg_new() failed. This sucks.\n");
-         print_error_list();
-         return 1;
-  }
-
-  switch (argv[1][0])
-  {
-    case 'f':
-      pkg = opkg_find_package (argv[2], NULL, NULL, NULL);
-      if (pkg)
-      {
-       print_package (pkg);
-      }
-      else
-       printf ("Package \"%s\" not found!\n", find_pkg->name);
-      break;
-    case 'i':
-      err = opkg_install_package (argv[1], progress_callback, "Installing...");
-      printf ("\nopkg_install_package returned %d (%s)\n", err, errors[err]);
-      break;
-
-    case 'u':
-      if (argv[1][3] == 'd')
-      {
-        err = opkg_update_package_lists (progress_callback, "Updating...");
-        printf ("\nopkg_update_package_lists returned %d (%s)\n", err, errors[err]);
-        break;
-      }
-      else
-      {
-        if (argc < 3)
-        {
-          err = opkg_upgrade_all (progress_callback, "Upgrading all...");
-          printf ("\nopkg_upgrade_all returned %d (%s)\n", err, errors[err]);
-        }
-        else
-        {
-          err = opkg_upgrade_package (argv[2], progress_callback, "Upgrading...");
-          printf ("\nopkg_upgrade_package returned %d (%s)\n", err, errors[err]);
-        }
-      }
-      break;
-
-    case 'l':
-      if (argc < 3)
-      {
-        printf ("Please specify one either all, installed or upgrades\n");
-      }
-      else
-      {
-        switch (argv[2][0])
-        {
-          case 'u':
-            printf ("Listing upgradable packages...\n");
-            opkg_list_upgradable_packages (package_list_upgradable_callback, NULL);
-            break;
-          case 'a':
-            printf ("Listing all packages...\n");
-            opkg_list_packages (package_list_callback, NULL);
-            printf ("\n");
-            break;
-          case 'i':
-            printf ("Listing installed packages...\n");
-            break;
-          default:
-            printf ("Unknown list option \"%s\"", argv[2]);
-        }
-      }
-      break;
-          
-    case 'r':
-      if (argv[1][1] == 'e')
-      {
-       err = opkg_remove_package (argv[2], progress_callback, "Removing...");
-       printf ("\nopkg_remove_package returned %d (%s)\n", err, errors[err]);
-       break;
-      }else if (argv[1][1] == 'p')
-      {
-        err = opkg_repository_accessibility_check();
-       printf("\nopkg_repository_accessibility_check returned (%d)\n", err);
-        break;
-      }
-
-    default:
-      printf ("Unknown command \"%s\"\n", argv[1]);
-  }
-
-
-  opkg_free ();
-
-  return 0;
+       pkg_t *pkg;
+       int err;
+
+       if (argc < 2) {
+               printf("Usage: %s command\n"
+                      "\nCommands:\n"
+                      "\tupdate - Update package lists\n"
+                      "\tfind [package] - Print details of the specified package\n"
+                      "\tinstall [package] - Install the specified package\n"
+                      "\tupgrade [package] - Upgrade the specified package\n"
+                      "\tlist upgrades - List the available upgrades\n"
+                      "\tlist all - List all available packages\n"
+                      "\tlist installed - List all the installed packages\n"
+                      "\tremove [package] - Remove the specified package\n"
+                      "\trping - Reposiroties ping, check the accessibility of repositories\n"
+                      "\ttest - Run test script\n", basename(argv[0]));
+               exit(0);
+       }
+
+       setenv("OFFLINE_ROOT", "/tmp", 0);
+
+       if (opkg_new()) {
+               printf("opkg_new() failed. This sucks.\n");
+               print_error_list();
+               return 1;
+       }
+
+       switch (argv[1][0]) {
+       case 'f':
+               pkg = opkg_find_package(argv[2], NULL, NULL, NULL);
+               if (pkg) {
+                       print_package(pkg);
+               } else
+                       printf("Package \"%s\" not found!\n", find_pkg->name);
+               break;
+       case 'i':
+               err =
+                   opkg_install_package(argv[2], progress_callback,
+                                        "Installing...");
+               printf("\nopkg_install_package returned %d\n", err);
+               break;
+
+       case 'u':
+               if (argv[1][2] == 'd') {
+                       err =
+                           opkg_update_package_lists(progress_callback,
+                                                     "Updating...");
+                       printf("\nopkg_update_package_lists returned %d\n",
+                              err);
+                       break;
+               } else {
+                       if (argc < 3) {
+                               err =
+                                   opkg_upgrade_all(progress_callback,
+                                                    "Upgrading all...");
+                               printf("\nopkg_upgrade_all returned %d\n", err);
+                       } else {
+                               err =
+                                   opkg_upgrade_package(argv[2],
+                                                        progress_callback,
+                                                        "Upgrading...");
+                               printf("\nopkg_upgrade_package returned %d\n",
+                                      err);
+                       }
+               }
+               break;
+
+       case 'l':
+               if (argc < 3) {
+                       printf
+                           ("Please specify one either all, installed or upgrades\n");
+               } else {
+                       switch (argv[2][0]) {
+                       case 'u':
+                               printf("Listing upgradable packages...\n");
+                               opkg_list_upgradable_packages
+                                   (package_list_upgradable_callback, NULL);
+                               break;
+                       case 'a':
+                               printf("Listing all packages...\n");
+                               opkg_list_packages(package_list_callback, NULL);
+                               printf("\n");
+                               break;
+                       case 'i':
+                               printf("Listing installed packages...\n");
+                               opkg_list_packages
+                                   (package_list_installed_callback, NULL);
+                               break;
+                       default:
+                               printf("Unknown list option \"%s\"\n", argv[2]);
+                       }
+               }
+               break;
+
+       case 'r':
+               if (argv[1][1] == 'e') {
+                       err =
+                           opkg_remove_package(argv[2], progress_callback,
+                                               "Removing...");
+                       printf("\nopkg_remove_package returned %d\n", err);
+                       break;
+               } else if (argv[1][1] == 'p') {
+                       err = opkg_repository_accessibility_check();
+                       printf
+                           ("\nopkg_repository_accessibility_check returned (%d)\n",
+                            err);
+                       break;
+               }
+
+       default:
+               printf("Unknown command \"%s\"\n", argv[1]);
+       }
+
+       opkg_free();
+
+       return 0;
 }