r4528 - in trunk/src/target/opkg: libopkg tests

tick at docs.openmoko.org tick at docs.openmoko.org
Wed Jul 16 10:37:12 CEST 2008


Author: tick
Date: 2008-07-16 10:37:12 +0200 (Wed, 16 Jul 2008)
New Revision: 4528

Modified:
   trunk/src/target/opkg/libopkg/opkg.c
   trunk/src/target/opkg/libopkg/opkg.h
   trunk/src/target/opkg/tests/libopkg_test.c
Log:

opkg: adding repository check function



Modified: trunk/src/target/opkg/libopkg/opkg.c
===================================================================
--- trunk/src/target/opkg/libopkg/opkg.c	2008-07-15 14:03:32 UTC (rev 4527)
+++ trunk/src/target/opkg/libopkg/opkg.c	2008-07-16 08:37:12 UTC (rev 4528)
@@ -1008,3 +1008,68 @@
 
   return package;
 }
+
+#include <curl/curl.h>
+/**
+ * @brief Check the accessibility of repositories. It will try to access the repository to check if the respository is accessible throught current network status. 
+ * @param opkg The opkg_t
+ * @return return how many repositories cannot access. 0 means all okay. 
+ */ 
+int opkg_repository_accessibility_check(opkg_t *opkg) 
+{
+  pkg_src_list_elt_t *iter;
+  str_list_elt_t *iter1;
+  str_list_t *src;
+  int repositories=0;
+  int ret=0;
+  int err;
+  char *repo_ptr;
+  char *stmp;
+  opkg_assert(opkg != NULL);
+
+  src = str_list_alloc();
+
+  for (iter = opkg->conf->pkg_src_list.head; iter; iter = iter->next) 
+  {
+    if (strstr(iter->data->value, "://") && 
+		    index(strstr(iter->data->value, "://") + 3, '/')) 
+      stmp = strndup(iter->data->value, 
+		      (index(strstr(iter->data->value, "://") + 3, '/') - iter->data->value)*sizeof(char));
+
+    else
+      stmp = strdup(iter->data->value);
+
+    for (iter1 = src->head; iter1; iter1 = iter1->next)
+    {
+      if (strstr(iter1->data, stmp)) 
+        break;
+    }
+    if (iter1)
+      continue;
+
+    sprintf_alloc(&repo_ptr, "%s/index.html",stmp);
+    free(stmp);
+
+    str_list_append(src, repo_ptr);
+    repositories++;
+  }
+  while (repositories > 0) 
+  {
+    iter1 = str_list_pop(src);
+    repositories--;
+
+    err = opkg_download(opkg->conf, iter1->data, "/dev/null", NULL, NULL);
+    if (!(err == CURLE_OK || 
+		err == CURLE_HTTP_RETURNED_ERROR || 
+		err == CURLE_FILE_COULDNT_READ_FILE ||
+		err == CURLE_REMOTE_FILE_NOT_FOUND || 
+		err == CURLE_TFTP_NOTFOUND
+		)) {
+	    ret++;
+    }
+    str_list_elt_deinit(iter1);
+    free(iter1);
+  }
+  free(src);
+  return ret;
+}

Modified: trunk/src/target/opkg/libopkg/opkg.h
===================================================================
--- trunk/src/target/opkg/libopkg/opkg.h	2008-07-15 14:03:32 UTC (rev 4527)
+++ trunk/src/target/opkg/libopkg/opkg.h	2008-07-16 08:37:12 UTC (rev 4528)
@@ -85,5 +85,6 @@
 int opkg_list_upgradable_packages (opkg_t *opkg, opkg_package_callback_t callback, void *user_data);
 opkg_package_t* opkg_find_package (opkg_t *opkg, const char *name, const char *version, const char *architecture, const char *repository);
 
+int opkg_repository_accessibility_check(opkg_t *opkg);
 
 #endif /* OPKG_H */

Modified: trunk/src/target/opkg/tests/libopkg_test.c
===================================================================
--- trunk/src/target/opkg/tests/libopkg_test.c	2008-07-15 14:03:32 UTC (rev 4527)
+++ trunk/src/target/opkg/tests/libopkg_test.c	2008-07-16 08:37:12 UTC (rev 4528)
@@ -148,6 +148,7 @@
 	    "\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);
@@ -229,9 +230,17 @@
       break;
           
     case 'r':
-      err = opkg_remove_package (opkg, argv[2], progress_callback, "Removing...");
-      printf ("\nopkg_remove_package returned %d (%s)\n", err, errors[err]);
-      break;
+      if (argv[1][1] == 'e')
+      {
+      	err = opkg_remove_package (opkg, 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(opkg);
+	printf("\nopkg_repository_accessibility_check returned (%d)\n", err);
+        break;
+      }
 
     default:
       printf ("Unknown command \"%s\"\n", argv[1]);





More information about the commitlog mailing list