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