aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenis Vlasenko <vda.linux@googlemail.com>2007-04-08 15:08:42 +0000
committerDenis Vlasenko <vda.linux@googlemail.com>2007-04-08 15:08:42 +0000
commit8d9f495d68664017e0b87f2c0c2d0eae9f3c4836 (patch)
tree157087760d624a657c3ce11b142afb1c72bf225a
parentb04b4357ff5a5b5194a7ff3c875d8746fac9ff33 (diff)
downloadbusybox-w32-8d9f495d68664017e0b87f2c0c2d0eae9f3c4836.tar.gz
busybox-w32-8d9f495d68664017e0b87f2c0c2d0eae9f3c4836.tar.bz2
busybox-w32-8d9f495d68664017e0b87f2c0c2d0eae9f3c4836.zip
getopt32: fix llist_t options ordering. llist_rev is not unused.
function old new delta tar_main 705 695 -10 sort_main 928 918 -10 decode_format_string 886 876 -10 run_parts_main 197 185 -12 ps_main 513 500 -13 wget_main 2764 2750 -14 awk_main 1014 1000 -14 od_main 2886 2866 -20 llist_rev 25 - -25 ------------------------------------------------------------------------------ (add/remove: 0/1 grow/shrink: 0/8 up/down: 0/-128) Total: -128 bytes
-rw-r--r--archival/tar.c3
-rw-r--r--coreutils/od_bloaty.c1
-rw-r--r--coreutils/sort.c1
-rw-r--r--debianutils/run_parts.c3
-rw-r--r--editors/awk.c1
-rw-r--r--include/libbb.h69
-rw-r--r--libbb/getopt32.c4
-rw-r--r--libbb/llist.c23
-rw-r--r--networking/wget.c2
-rw-r--r--procps/ps.c1
10 files changed, 53 insertions, 55 deletions
diff --git a/archival/tar.c b/archival/tar.c
index 6552d6c57..f2f1ccd06 100644
--- a/archival/tar.c
+++ b/archival/tar.c
@@ -864,10 +864,9 @@ int tar_main(int argc, char **argv)
864 char *cp = last_char_is(argv[optind], '/'); 864 char *cp = last_char_is(argv[optind], '/');
865 if (cp > argv[optind]) 865 if (cp > argv[optind])
866 *cp = '\0'; 866 *cp = '\0';
867 llist_add_to(&tar_handle->accept, argv[optind]); 867 llist_add_to_end(&tar_handle->accept, argv[optind]);
868 optind++; 868 optind++;
869 } 869 }
870 tar_handle->accept = llist_rev(tar_handle->accept);
871 870
872 if (tar_handle->accept || tar_handle->reject) 871 if (tar_handle->accept || tar_handle->reject)
873 tar_handle->filter = filter_accept_reject_list; 872 tar_handle->filter = filter_accept_reject_list;
diff --git a/coreutils/od_bloaty.c b/coreutils/od_bloaty.c
index 74765f842..efdbf354a 100644
--- a/coreutils/od_bloaty.c
+++ b/coreutils/od_bloaty.c
@@ -1312,7 +1312,6 @@ int od_main(int argc, char **argv)
1312 if (opt & OPT_l) decode_format_string("d4"); 1312 if (opt & OPT_l) decode_format_string("d4");
1313 if (opt & OPT_o) decode_format_string("o2"); 1313 if (opt & OPT_o) decode_format_string("o2");
1314 //if (opt & OPT_t)... 1314 //if (opt & OPT_t)...
1315 lst_t = llist_rev(lst_t);
1316 while (lst_t) { 1315 while (lst_t) {
1317 decode_format_string(lst_t->data); 1316 decode_format_string(lst_t->data);
1318 lst_t = lst_t->link; 1317 lst_t = lst_t->link;
diff --git a/coreutils/sort.c b/coreutils/sort.c
index 311d0cb9c..dad542964 100644
--- a/coreutils/sort.c
+++ b/coreutils/sort.c
@@ -296,7 +296,6 @@ int sort_main(int argc, char **argv)
296 key_separator = str_t[0]; 296 key_separator = str_t[0];
297 } 297 }
298 /* parse sort key */ 298 /* parse sort key */
299 lst_k = llist_rev(lst_k);
300 while (lst_k) { 299 while (lst_k) {
301 enum { 300 enum {
302 FLAG_allowed_for_k = 301 FLAG_allowed_for_k =
diff --git a/debianutils/run_parts.c b/debianutils/run_parts.c
index 873263a22..eb2fb94b3 100644
--- a/debianutils/run_parts.c
+++ b/debianutils/run_parts.c
@@ -131,9 +131,6 @@ int run_parts_main(int argc, char **argv)
131 */ 131 */
132 umask(xstrtoul_range(umask_p, 8, 0, 07777)); 132 umask(xstrtoul_range(umask_p, 8, 0, 07777));
133 } 133 }
134//XXX: FIXME: reverse the list before handing it over to the user.
135//XXX: FIXME: The common case seems to be to use the order given by the user
136 arg_list = llist_rev(arg_list); /* XXX: getopt32 appends them */
137 for (tmp = 1; arg_list; arg_list = arg_list->link, tmp++) 134 for (tmp = 1; arg_list; arg_list = arg_list->link, tmp++)
138 G.cmd[tmp] = arg_list->data; 135 G.cmd[tmp] = arg_list->data;
139 /* G.cmd[tmp] = NULL; - G is already zeroed out */ 136 /* G.cmd[tmp] = NULL; - G is already zeroed out */
diff --git a/editors/awk.c b/editors/awk.c
index a18025ef0..f331a33fa 100644
--- a/editors/awk.c
+++ b/editors/awk.c
@@ -2707,7 +2707,6 @@ int awk_main(int argc, char **argv)
2707 argv += optind; 2707 argv += optind;
2708 argc -= optind; 2708 argc -= optind;
2709 if (opt & 0x1) setvar_s(V[FS], opt_F); // -F 2709 if (opt & 0x1) setvar_s(V[FS], opt_F); // -F
2710 opt_v = llist_rev(opt_v);
2711 while (opt_v) { /* -v */ 2710 while (opt_v) { /* -v */
2712 if (!is_assignment(llist_pop(&opt_v))) 2711 if (!is_assignment(llist_pop(&opt_v)))
2713 bb_show_usage(); 2712 bb_show_usage();
diff --git a/include/libbb.h b/include/libbb.h
index 6956aaf7b..6731adfe3 100644
--- a/include/libbb.h
+++ b/include/libbb.h
@@ -285,7 +285,7 @@ extern void sig_catch(int,void (*)(int));
285//#define sig_uncatch(s) (sig_catch((s), SIG_DFL)) 285//#define sig_uncatch(s) (sig_catch((s), SIG_DFL))
286extern void sig_block(int); 286extern void sig_block(int);
287extern void sig_unblock(int); 287extern void sig_unblock(int);
288/* UNUSED: extern void sig_blocknone(void);*/ 288/* UNUSED: extern void sig_blocknone(void); */
289extern void sig_pause(void); 289extern void sig_pause(void);
290 290
291#define wait_crashed(w) ((w) & 127) 291#define wait_crashed(w) ((w) & 127)
@@ -294,7 +294,6 @@ extern void sig_pause(void);
294#define wait_stopped(w) (((w) & 127) == 127) 294#define wait_stopped(w) (((w) & 127) == 127)
295 295
296 296
297
298void xsetgid(gid_t gid); 297void xsetgid(gid_t gid);
299void xsetuid(uid_t uid); 298void xsetuid(uid_t uid);
300void xchdir(const char *path); 299void xchdir(const char *path);
@@ -343,7 +342,7 @@ int xsocket_stream(len_and_sockaddr **lsap);
343/* Create server socket bound to bindaddr:port. bindaddr can be NULL, 342/* Create server socket bound to bindaddr:port. bindaddr can be NULL,
344 * numeric IP ("N.N.N.N") or numeric IPv6 address, 343 * numeric IP ("N.N.N.N") or numeric IPv6 address,
345 * and can have ":PORT" suffix (for IPv6 use "[X:X:...:X]:PORT"). 344 * and can have ":PORT" suffix (for IPv6 use "[X:X:...:X]:PORT").
346 * If there is no suffix, port argument is used */ 345 * Only if there is no suffix, port argument is used */
347int create_and_bind_stream_or_die(const char *bindaddr, int port); 346int create_and_bind_stream_or_die(const char *bindaddr, int port);
348int create_and_bind_dgram_or_die(const char *bindaddr, int port); 347int create_and_bind_dgram_or_die(const char *bindaddr, int port);
349/* Create client TCP socket connected to peer:port. Peer cannot be NULL. 348/* Create client TCP socket connected to peer:port. Peer cannot be NULL.
@@ -412,9 +411,9 @@ extern char *xasprintf(const char *format, ...) __attribute__ ((format (printf,
412//int LONE_DASH(const char *s) { return s[0] == '-' && !s[1]; } 411//int LONE_DASH(const char *s) { return s[0] == '-' && !s[1]; }
413//static ATTRIBUTE_ALWAYS_INLINE 412//static ATTRIBUTE_ALWAYS_INLINE
414//int NOT_LONE_DASH(const char *s) { return s[0] != '-' || s[1]; } 413//int NOT_LONE_DASH(const char *s) { return s[0] != '-' || s[1]; }
415#define LONE_DASH(s) ((s)[0] == '-' && !(s)[1]) 414#define LONE_DASH(s) ((s)[0] == '-' && !(s)[1])
416#define NOT_LONE_DASH(s) ((s)[0] != '-' || (s)[1]) 415#define NOT_LONE_DASH(s) ((s)[0] != '-' || (s)[1])
417#define LONE_CHAR(s,c) ((s)[0] == (c) && !(s)[1]) 416#define LONE_CHAR(s,c) ((s)[0] == (c) && !(s)[1])
418#define NOT_LONE_CHAR(s,c) ((s)[0] != (c) || (s)[1]) 417#define NOT_LONE_CHAR(s,c) ((s)[0] != (c) || (s)[1])
419 418
420/* dmalloc will redefine these to it's own implementation. It is safe 419/* dmalloc will redefine these to it's own implementation. It is safe
@@ -456,14 +455,17 @@ extern FILE *fopen_or_warn(const char *filename, const char *mode);
456extern FILE *fopen_or_warn_stdin(const char *filename); 455extern FILE *fopen_or_warn_stdin(const char *filename);
457 456
458 457
459extern char *utoa(unsigned n); 458char *utoa(unsigned n);
460extern char *itoa(int n); 459char *itoa(int n);
461/* Returns a pointer past the formatted number, does NOT null-terminate */ 460/* Returns a pointer past the formatted number, does NOT null-terminate */
462extern char *utoa_to_buf(unsigned n, char *buf, unsigned buflen); 461char *utoa_to_buf(unsigned n, char *buf, unsigned buflen);
463extern char *itoa_to_buf(int n, char *buf, unsigned buflen); 462char *itoa_to_buf(int n, char *buf, unsigned buflen);
464extern void smart_ulltoa5(unsigned long long ul, char buf[5]); 463void smart_ulltoa5(unsigned long long ul, char buf[5]);
465/* Put a string of hex bytes (ala "1b"), return advanced pointer */ 464//TODO: provide pointer to buf (avoid statics)?
466extern char *bin2hex(char *buf, const char *cp, int count); 465const char *make_human_readable_str(unsigned long long size,
466 unsigned long block_size, unsigned long display_unit);
467/* Put a string of hex bytes ("1b2e66fe"...), return advanced pointer */
468char *bin2hex(char *buf, const char *cp, int count);
467 469
468struct suffix_mult { 470struct suffix_mult {
469 const char *suffix; 471 const char *suffix;
@@ -580,16 +582,20 @@ extern uint32_t option_mask32;
580extern uint32_t getopt32(int argc, char **argv, const char *applet_opts, ...); 582extern uint32_t getopt32(int argc, char **argv, const char *applet_opts, ...);
581 583
582 584
583typedef struct llist_s { 585typedef struct llist_t {
584 char *data; 586 char *data;
585 struct llist_s *link; 587 struct llist_t *link;
586} llist_t; 588} llist_t;
587extern void llist_add_to(llist_t **old_head, void *data); 589void llist_add_to(llist_t **old_head, void *data);
588extern void llist_add_to_end(llist_t **list_head, void *data); 590void llist_add_to_end(llist_t **list_head, void *data);
589extern void *llist_pop(llist_t **elm); 591void *llist_pop(llist_t **elm);
590extern void llist_unlink(llist_t **head, llist_t *elm); 592void llist_unlink(llist_t **head, llist_t *elm);
591extern void llist_free(llist_t *elm, void (*freeit)(void *data)); 593void llist_free(llist_t *elm, void (*freeit)(void *data));
592extern llist_t* llist_rev(llist_t *list); 594llist_t *llist_rev(llist_t *list);
595/* BTW, surprisingly, changing API to
596 * llist_t *llist_add_to(llist_t *old_head, void *data)
597 * etc does not result in smaller code... */
598
593 599
594#if ENABLE_FEATURE_PIDFILE 600#if ENABLE_FEATURE_PIDFILE
595int write_pidfile(const char *path); 601int write_pidfile(const char *path);
@@ -674,10 +680,6 @@ extern int del_loop(const char *device);
674extern int set_loop(char **device, const char *file, unsigned long long offset); 680extern int set_loop(char **device, const char *file, unsigned long long offset);
675 681
676 682
677//TODO: provide pointer to buf (avoid statics)?
678const char *make_human_readable_str(unsigned long long size,
679 unsigned long block_size, unsigned long display_unit);
680
681//TODO: pass buf pointer or return allocated buf (avoid statics)? 683//TODO: pass buf pointer or return allocated buf (avoid statics)?
682char *bb_askpass(int timeout, const char * prompt); 684char *bb_askpass(int timeout, const char * prompt);
683int bb_ask_confirmation(void); 685int bb_ask_confirmation(void);
@@ -725,14 +727,14 @@ extern void print_login_issue(const char *issue_file, const char *tty);
725extern void print_login_prompt(void); 727extern void print_login_prompt(void);
726 728
727 729
728extern int get_terminal_width_height(const int fd, int *width, int *height); 730int get_terminal_width_height(const int fd, int *width, int *height);
729 731
730char *is_in_ino_dev_hashtable(const struct stat *statbuf); 732char *is_in_ino_dev_hashtable(const struct stat *statbuf);
731void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name); 733void add_to_ino_dev_hashtable(const struct stat *statbuf, const char *name);
732void reset_ino_dev_hashtable(void); 734void reset_ino_dev_hashtable(void);
733#ifdef __GLIBC__ 735#ifdef __GLIBC__
734/* At least glibc has horrendously large inline for this, so wrap it */ 736/* At least glibc has horrendously large inline for this, so wrap it */
735extern unsigned long long bb_makedev(unsigned int major, unsigned int minor); 737unsigned long long bb_makedev(unsigned int major, unsigned int minor);
736#undef makedev 738#undef makedev
737#define makedev(a,b) bb_makedev(a,b) 739#define makedev(a,b) bb_makedev(a,b)
738#endif 740#endif
@@ -745,7 +747,7 @@ extern unsigned long long bb_makedev(unsigned int major, unsigned int minor);
745#else 747#else
746#define MAX_HISTORY 0 748#define MAX_HISTORY 0
747#endif 749#endif
748struct line_input_t { 750typedef struct line_input_t {
749 int flags; 751 int flags;
750 const char *path_lookup; 752 const char *path_lookup;
751#if MAX_HISTORY 753#if MAX_HISTORY
@@ -754,7 +756,7 @@ struct line_input_t {
754 USE_FEATURE_EDITING_SAVEHISTORY(const char *hist_file;) 756 USE_FEATURE_EDITING_SAVEHISTORY(const char *hist_file;)
755 char *history[MAX_HISTORY + 1]; 757 char *history[MAX_HISTORY + 1];
756#endif 758#endif
757}; 759} line_input_t;
758enum { 760enum {
759 DO_HISTORY = 1 * (MAX_HISTORY > 0), 761 DO_HISTORY = 1 * (MAX_HISTORY > 0),
760 SAVE_HISTORY = 2 * (MAX_HISTORY > 0) * ENABLE_FEATURE_EDITING_SAVEHISTORY, 762 SAVE_HISTORY = 2 * (MAX_HISTORY > 0) * ENABLE_FEATURE_EDITING_SAVEHISTORY,
@@ -764,7 +766,6 @@ enum {
764 WITH_PATH_LOOKUP = 0x20, 766 WITH_PATH_LOOKUP = 0x20,
765 FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION, 767 FOR_SHELL = DO_HISTORY | SAVE_HISTORY | TAB_COMPLETION | USERNAME_COMPLETION,
766}; 768};
767typedef struct line_input_t line_input_t;
768line_input_t *new_line_input_t(int flags); 769line_input_t *new_line_input_t(int flags);
769int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state); 770int read_line_input(const char* prompt, char* command, int maxsize, line_input_t *state);
770#else 771#else
@@ -798,7 +799,7 @@ typedef struct {
798 /* sizeof(task_struct.comm) in /usr/include/linux/sched.h */ 799 /* sizeof(task_struct.comm) in /usr/include/linux/sched.h */
799 char state[4]; 800 char state[4];
800 char comm[COMM_LEN]; 801 char comm[COMM_LEN];
801// user/group? - use passwd/group parsing functions 802 /* user/group? - use passwd/group parsing functions */
802} procps_status_t; 803} procps_status_t;
803enum { 804enum {
804 PSSCAN_PID = 1 << 0, 805 PSSCAN_PID = 1 << 0,
@@ -902,18 +903,22 @@ extern const char bb_dev_null[];
902extern const int const_int_0; 903extern const int const_int_0;
903extern const int const_int_1; 904extern const int const_int_1;
904 905
906
905#ifndef BUFSIZ 907#ifndef BUFSIZ
906#define BUFSIZ 4096 908#define BUFSIZ 4096
907#endif 909#endif
910// TODO: provide hard guarantees on minimum size of bb_common_bufsiz1
908extern char bb_common_bufsiz1[BUFSIZ+1]; 911extern char bb_common_bufsiz1[BUFSIZ+1];
909/* This struct is deliberately not defined. */ 912/* This struct is deliberately not defined. */
910/* See docs/keep_data_small.txt */ 913/* See docs/keep_data_small.txt */
911struct globals; 914struct globals;
912/* Magic prevents this from going into rodata */ 915/* '*const' ptr makes gcc optimize code much better.
913/* If you want to assign a value, use PTR_TO_GLOBALS = xxx */ 916 * Magic prevents ptr_to_globals from going into rodata
917 * If you want to assign a value, use PTR_TO_GLOBALS = xxx */
914extern struct globals *const ptr_to_globals; 918extern struct globals *const ptr_to_globals;
915#define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals) 919#define PTR_TO_GLOBALS (*(struct globals**)&ptr_to_globals)
916 920
921
917/* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it, 922/* You can change LIBBB_DEFAULT_LOGIN_SHELL, but don't use it,
918 * use bb_default_login_shell and following defines. 923 * use bb_default_login_shell and following defines.
919 * If you change LIBBB_DEFAULT_LOGIN_SHELL, 924 * If you change LIBBB_DEFAULT_LOGIN_SHELL,
diff --git a/libbb/getopt32.c b/libbb/getopt32.c
index 6cdbfd35d..dec97d743 100644
--- a/libbb/getopt32.c
+++ b/libbb/getopt32.c
@@ -242,7 +242,7 @@ Special characters:
242 llist_t *patterns = NULL; 242 llist_t *patterns = NULL;
243 243
244 (this pointer must be initializated to NULL if the list is empty 244 (this pointer must be initializated to NULL if the list is empty
245 as required by *llist_add_to(llist_t *old_head, char *new_item).) 245 as required by llist_add_to_end(llist_t **old_head, char *new_item).)
246 246
247 opt_complementary = "e::"; 247 opt_complementary = "e::";
248 248
@@ -487,7 +487,7 @@ getopt32(int argc, char **argv, const char *applet_opts, ...)
487 if (on_off->counter) 487 if (on_off->counter)
488 (*(on_off->counter))++; 488 (*(on_off->counter))++;
489 if (on_off->list_flg) { 489 if (on_off->list_flg) {
490 llist_add_to((llist_t **)(on_off->optarg), optarg); 490 llist_add_to_end((llist_t **)(on_off->optarg), optarg);
491 } else if (on_off->optarg) { 491 } else if (on_off->optarg) {
492 *(char **)(on_off->optarg) = optarg; 492 *(char **)(on_off->optarg) = optarg;
493 } 493 }
diff --git a/libbb/llist.c b/libbb/llist.c
index 2b34f762c..706751447 100644
--- a/libbb/llist.c
+++ b/libbb/llist.c
@@ -14,7 +14,7 @@
14#include "libbb.h" 14#include "libbb.h"
15 15
16/* Add data to the start of the linked list. */ 16/* Add data to the start of the linked list. */
17void llist_add_to(llist_t ** old_head, void *data) 17void llist_add_to(llist_t **old_head, void *data)
18{ 18{
19 llist_t *new_head = xmalloc(sizeof(llist_t)); 19 llist_t *new_head = xmalloc(sizeof(llist_t));
20 20
@@ -24,7 +24,7 @@ void llist_add_to(llist_t ** old_head, void *data)
24} 24}
25 25
26/* Add data to the end of the linked list. */ 26/* Add data to the end of the linked list. */
27void llist_add_to_end(llist_t ** list_head, void *data) 27void llist_add_to_end(llist_t **list_head, void *data)
28{ 28{
29 llist_t *new_item = xmalloc(sizeof(llist_t)); 29 llist_t *new_item = xmalloc(sizeof(llist_t));
30 30
@@ -43,7 +43,7 @@ void llist_add_to_end(llist_t ** list_head, void *data)
43} 43}
44 44
45/* Remove first element from the list and return it */ 45/* Remove first element from the list and return it */
46void *llist_pop(llist_t ** head) 46void *llist_pop(llist_t **head)
47{ 47{
48 void *data, *next; 48 void *data, *next;
49 49
@@ -81,7 +81,7 @@ void llist_unlink(llist_t **head, llist_t *elm)
81 81
82/* Recursively free all elements in the linked list. If freeit != NULL 82/* Recursively free all elements in the linked list. If freeit != NULL
83 * call it on each datum in the list */ 83 * call it on each datum in the list */
84void llist_free(llist_t * elm, void (*freeit) (void *data)) 84void llist_free(llist_t *elm, void (*freeit) (void *data))
85{ 85{
86 while (elm) { 86 while (elm) {
87 void *data = llist_pop(&elm); 87 void *data = llist_pop(&elm);
@@ -91,18 +91,19 @@ void llist_free(llist_t * elm, void (*freeit) (void *data))
91 } 91 }
92} 92}
93 93
94/* Reverse list order. Useful since getopt32 saves option params 94#ifdef UNUSED
95 * in reverse order */ 95/* Reverse list order. */
96llist_t *llist_rev(llist_t * list) 96llist_t *llist_rev(llist_t *list)
97{ 97{
98 llist_t *new = NULL; 98 llist_t *rev = NULL;
99 99
100 while (list) { 100 while (list) {
101 llist_t *next = list->link; 101 llist_t *next = list->link;
102 102
103 list->link = new; 103 list->link = rev;
104 new = list; 104 rev = list;
105 list = next; 105 list = next;
106 } 106 }
107 return new; 107 return rev;
108} 108}
109#endif
diff --git a/networking/wget.c b/networking/wget.c
index 94b9b6954..1da18ff77 100644
--- a/networking/wget.c
+++ b/networking/wget.c
@@ -159,7 +159,7 @@ int wget_main(int argc, char **argv)
159 if (headers_llist) { 159 if (headers_llist) {
160 int size = 1; 160 int size = 1;
161 char *cp; 161 char *cp;
162 llist_t *ll = headers_llist = llist_rev(headers_llist); 162 llist_t *ll = headers_llist;
163 while (ll) { 163 while (ll) {
164 size += strlen(ll->data) + 2; 164 size += strlen(ll->data) + 2;
165 ll = ll->link; 165 ll = ll->link;
diff --git a/procps/ps.c b/procps/ps.c
index 2be0b3605..f8f5c1aa9 100644
--- a/procps/ps.c
+++ b/procps/ps.c
@@ -253,7 +253,6 @@ int ps_main(int argc, char **argv)
253 opt_complementary = "o::"; 253 opt_complementary = "o::";
254 getopt32(argc, argv, "o:aAdefl", &opt_o); 254 getopt32(argc, argv, "o:aAdefl", &opt_o);
255 if (opt_o) { 255 if (opt_o) {
256 opt_o = llist_rev(opt_o);
257 do { 256 do {
258 parse_o(opt_o->data); 257 parse_o(opt_o->data);
259 opt_o = opt_o->link; 258 opt_o = opt_o->link;