summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libopkg/libopkg.c5
-rw-r--r--libopkg/opkg.c2
-rw-r--r--libopkg/opkg_cmd.c27
-rw-r--r--libopkg/opkg_cmd.h2
-rw-r--r--libopkg/opkg_error.h2
-rw-r--r--libopkg/opkg_utils.c100
-rw-r--r--libopkg/opkg_utils.h6
7 files changed, 60 insertions, 84 deletions
diff --git a/libopkg/libopkg.c b/libopkg/libopkg.c
index 418a324..787a510 100644
--- a/libopkg/libopkg.c
+++ b/libopkg/libopkg.c
@@ -36,7 +36,7 @@ int default_opkg_message_callback(opkg_conf_t *conf, message_level_t level,
return 0;
} else {
if ( level == OPKG_ERROR ){
- push_error_list(&error_list, msg);
+ push_error_list(msg);
} else
printf("%s",msg);
}
@@ -131,7 +131,8 @@ opkg_op (int argc, char *argv[])
args_deinit (&args);
if (err)
{
- opkg_print_error_list (&opkg_conf);
+ print_error_list();
+ free_error_list();
return err;
}
diff --git a/libopkg/opkg.c b/libopkg/opkg.c
index 5ff0eb5..d6b6658 100644
--- a/libopkg/opkg.c
+++ b/libopkg/opkg.c
@@ -34,8 +34,6 @@
#include <libbb/libbb.h>
-struct errlist* error_list;
-
struct _opkg_t
{
args_t *args;
diff --git a/libopkg/opkg_cmd.c b/libopkg/opkg_cmd.c
index e7038c5..99ee64d 100644
--- a/libopkg/opkg_cmd.c
+++ b/libopkg/opkg_cmd.c
@@ -141,26 +141,6 @@ opkg_cmd_t *opkg_cmd_find(const char *name)
return NULL;
}
-void opkg_print_error_list (opkg_conf_t *conf)
-{
- struct errlist *err = error_list;
-
- if (err) {
- reverse_error_list(&err);
-
- printf ("Collected errors:\n");
- /* Here we print the errors collected and free the list */
- while (err != NULL) {
- printf (" * %s", err->errmsg);
- err = err->next;
-
- }
-
- free_error_list(&error_list);
- }
-
-}
-
int opkg_cmd_exec(opkg_cmd_t *cmd, opkg_conf_t *conf, int argc, const char **argv, void *userdata)
{
int result;
@@ -169,11 +149,8 @@ int opkg_cmd_exec(opkg_cmd_t *cmd, opkg_conf_t *conf, int argc, const char **arg
result = (cmd->fun)(conf, argc, argv);
- if ( result != 0 && !error_list) {
- opkg_message(conf, OPKG_NOTICE, "An error occurred, return value: %d.\n", result);
- }
-
- opkg_print_error_list (conf);
+ print_error_list();
+ free_error_list();
p_userdata = NULL;
return result;
diff --git a/libopkg/opkg_cmd.h b/libopkg/opkg_cmd.h
index c597555..f512488 100644
--- a/libopkg/opkg_cmd.h
+++ b/libopkg/opkg_cmd.h
@@ -31,6 +31,4 @@ typedef struct opkg_cmd opkg_cmd_t;
opkg_cmd_t *opkg_cmd_find(const char *name);
int opkg_cmd_exec(opkg_cmd_t *cmd, opkg_conf_t *conf, int argc,
const char **argv, void *userdata);
-void opkg_print_error_list (opkg_conf_t *conf);
-
#endif
diff --git a/libopkg/opkg_error.h b/libopkg/opkg_error.h
index 43a5507..ec0d1c2 100644
--- a/libopkg/opkg_error.h
+++ b/libopkg/opkg_error.h
@@ -52,6 +52,4 @@ struct errlist {
struct errlist * next;
} ;
-extern struct errlist* error_list;
-
#endif /* OPKG_ERROR_H */
diff --git a/libopkg/opkg_utils.c b/libopkg/opkg_utils.c
index f0ef051..92291c4 100644
--- a/libopkg/opkg_utils.c
+++ b/libopkg/opkg_utils.c
@@ -146,60 +146,64 @@ int line_is_blank(const char *line)
return 1;
}
+static struct errlist *error_list_head, *error_list_tail;
+
/*
* XXX: this function should not allocate memory as it may be called to
* print an error because we are out of memory.
*/
-void push_error_list(struct errlist ** errors, char * msg){
- struct errlist *err_lst_tmp;
-
- err_lst_tmp = calloc (1, sizeof (struct errlist) );
- if (err_lst_tmp == NULL) {
- fprintf(stderr, "%s: calloc: %s\n", __FUNCTION__, strerror(errno));
- return;
- }
-
- err_lst_tmp->errmsg = strdup(msg);
- if (err_lst_tmp->errmsg == NULL) {
- fprintf(stderr, "%s: strdup: %s\n", __FUNCTION__, strerror(errno));
- free(err_lst_tmp);
- return;
- }
-
- err_lst_tmp->next = *errors;
- *errors = err_lst_tmp;
+void push_error_list(char * msg)
+{
+ struct errlist *e;
+
+ e = calloc(1, sizeof(struct errlist));
+ if (e == NULL) {
+ fprintf(stderr, "%s: calloc: %s\n",
+ __FUNCTION__, strerror(errno));
+ return;
+ }
+
+ e->errmsg = strdup(msg);
+ if (e->errmsg == NULL) {
+ fprintf(stderr, "%s: strdup: %s\n",
+ __FUNCTION__, strerror(errno));
+ free(e);
+ return;
+ }
+
+ e->next = NULL;
+
+ if (error_list_head) {
+ error_list_tail->next = e;
+ error_list_tail = e;
+ } else {
+ error_list_head = error_list_tail = e;
+ }
}
-
-void reverse_error_list(struct errlist **errors){
- struct errlist *result=NULL;
- struct errlist *current= *errors;
- struct errlist *next;
-
- while ( current != NULL ) {
- next = current->next;
- current->next=result;
- result=current;
- current=next;
- }
- *errors=result;
-
+void free_error_list(void)
+{
+ struct errlist *err, *err_tmp;
+
+ err = error_list_head;
+ while (err != NULL) {
+ free(err->errmsg);
+ err_tmp = err;
+ err = err->next;
+ free(err_tmp);
+ }
}
-
-void free_error_list(struct errlist **errors){
-struct errlist *err_tmp_lst;
-
- err_tmp_lst = *errors;
-
- while (err_tmp_lst != NULL) {
- free(err_tmp_lst->errmsg);
- err_tmp_lst = error_list->next;
- free(*errors);
- *errors = err_tmp_lst;
- }
-
-
+void print_error_list (void)
+{
+ struct errlist *err = error_list_head;
+
+ if (err) {
+ printf ("Collected errors:\n");
+ /* Here we print the errors collected and free the list */
+ while (err != NULL) {
+ printf (" * %s", err->errmsg);
+ err = err->next;
+ }
+ }
}
-
-
diff --git a/libopkg/opkg_utils.h b/libopkg/opkg_utils.h
index ed9215b..a6c9eb0 100644
--- a/libopkg/opkg_utils.h
+++ b/libopkg/opkg_utils.h
@@ -21,9 +21,9 @@
#include "pkg.h"
#include "opkg_error.h"
-void push_error_list(struct errlist **errors,char * msg);
-void reverse_error_list(struct errlist **errors);
-void free_error_list(struct errlist **errors);
+void push_error_list(char * msg);
+void free_error_list(void);
+void print_error_list(void);
long unsigned int get_available_blocks(char * filesystem);
char **read_raw_pkgs_from_file(const char *file_name);