Hi,
I'm sending a patch for fcoeadm, which fixes broken support of long options. 
Only some long options are supported currently. See:
https://bugzilla.redhat.com/show_bug.cgi?id=498551

After aplying this patch, all types of options supported by getopt_long will 
be also supported by fcoeadm.

The patch has been made againts 1.0.7 of fcoe-utils, but it should apply fine 
to current code. Please let me know if there is anything wrong with it.

Signed-off-by: Jan Zeleny <[email protected]>
---
--- fcoe-utils-1.0.7/fcoeadm.c  2009-05-04 11:29:00.000000000 +0200             
         
+++ fcoe-utils-1.0.7/fcoeadm.c.longOptions      2009-05-05 17:34:37.000000000 
+0200      
@@ -44,7 +44,7 @@ static struct option fcoeadm_opts[] = {                       
         
     {"create", 1, 0, 'c'},                                                     
         
     {"destroy", 1, 0, 'd'},                                                    
         
     {"reset", 1, 0, 'r'},                                                      
         
-    {"interface", 1, 0, 'a'},                                                  
         
+    {"interface", 1, 0, 'i'},                                                  
         
     {"target", 1, 0, 't'},                                                     
         
     {"lun", 1, 0, 'l'},                                                        
         
     {"stats", 1, 0, 's'},                                                      
         
@@ -449,44 +449,45 @@ int main(int argc, char *argv[])                          
         
                case 'c':                                                       
         
                        if ((argc < 2 || argc > 3) ||                           
         
                            strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) ||    
         
-                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 
2))          
+                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 
&& argv[1][1] != '-'))
                                goto error;                                     
                    
                        rc = fcoeadm_create(optarg);                            
                    
                        goto done;                                              
                    
                case 'd':                                                       
                    
                        if ((argc < 2 || argc > 3) ||                           
                    
                            strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) ||    
                    
-                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 
2))                     
+                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 
&& argv[1][1] != '-'))
                                goto error;                                     
                    
                        rc = fcoeadm_destroy(optarg);                           
                    
                        goto done;                                              
                    
                case 'r':                                                       
                    
                        if ((argc < 2 || argc > 3) ||                           
                    
                            strnlen(optarg, MAX_ARG_LEN) > (IFNAMSIZ - 1) ||    
                    
-                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 
2))                     
+                           ((argc == 3) && strnlen(argv[1], MAX_ARG_LEN) > 2 
&& argv[1][1] != '-'))
                                goto error;                                     
                    
                        rc = fcoeadm_reset(optarg);                             
                    
                        goto done;                                              
                    
                case 'i':                                                       
                    
-                       if (argc < 2 || argc > 3)                               
                    
+                       if (argc < 2 || argc > 3 ||                             
                    
+                           (argc == 3 && strnlen(argv[1], MAX_ARG_LEN) > 2 &&  
                    
+          (argv[1][1] != '-' || strchr(argv[1],'=') != NULL)))                 
                    
                                goto error;                                     
                    
                        s = NULL;                                               
                    
-                       if (argc == 2 && argv[optind]) {                        
                    
-                               if (strnlen(argv[optind], MAX_ARG_LEN) >        
                    
-                                               (IFNAMSIZ - 1))                 
                    
-                                       goto error;                             
                    
-                               if (strnlen(argv[optind], MAX_ARG_LEN) > 2)     
                    
-                                       s = argv[optind] + 2;                   
                    
-                       }                                                       
                    
-                       if (argc == 3) {                                        
                    
-                               if ((optind == 1) &&                            
                    
-                                   strnlen(argv[1], MAX_ARG_LEN) > 2)          
                    
-                                       goto error;                             
                    
-                               s = argv[optind];                               
                    
-                       }                                                       
                    
-                       if (s)                                                  
                    
+      if (argc == 2) {                                                         
                    
+        if (argv[1][1] == '-')                                                 
                    
+          s = strchr(argv[1],'=')+1;                                           
                    
+        else                                                                   
                    
+          s = argv[1]+2;                                                       
                    
+      }                                                                        
                    
+      else {                                                                   
                    
+        s = argv[2];                                                           
                    
+      }                                                                        
                    
+                       if (s) {                                                
                    
+        if (strnlen(s,MAX_ARG_LEN) > (IFNAMSIZ - 1))                           
                    
+          goto error;                                                          
                    
                                strncpy(opt_info->ifname, s,                    
                    
                                        sizeof(opt_info->ifname));              
                    
+      }                                                                        
                    
                        if (strnlen(opt_info->ifname, IFNAMSIZ - 1)) {          
                    
                                if (fcoeadm_validate_interface(                 
                    
                                        opt_info->ifname,                       
                    
@@ -497,21 +498,26 @@ int main(int argc, char *argv[])                          
                    
                        rc = fcoeadm_display_adapter_info(opt_info);            
                    
                        goto done;                                              
                    
                case 't':                                                       
                    
-                       if ((argc < 2 || argc > 3) ||                           
                    
-                           (argv[1] &&                                         
                    
-                            strnlen(argv[1], MAX_ARG_LEN) > (IFNAMSIZ - 1)) 
||
-                           (argv[2] &&
-                            strnlen(argv[2], MAX_ARG_LEN) > (IFNAMSIZ - 1)))
+                       if (argc < 2 || argc > 3 ||
+                           (argc == 3 && strnlen(argv[1], MAX_ARG_LEN) > 2 &&
+          (argv[1][1] != '-' || strchr(argv[1],'=') != NULL)))
                                goto error;
-                       if (strnlen(argv[1], MAX_ARG_LEN) > 2) {
-                               if (argc >= 3)
-                                       goto error;
-                               strncpy(opt_info->ifname, argv[1] + 2,
-                                       sizeof(opt_info->ifname));
-                       }
-                       if (argv[2])
-                               strncpy(opt_info->ifname, argv[2],
+                       s = NULL;
+      if (argc == 2) {
+        if (argv[1][1] == '-')
+          s = strchr(argv[1],'=')+1;
+        else
+          s = argv[1]+2;
+      }
+      else {
+        s = argv[2];
+      }
+                       if (s) {
+        if (strnlen(s,MAX_ARG_LEN) > (IFNAMSIZ - 1))
+          goto error;
+                               strncpy(opt_info->ifname, s,
                                        sizeof(opt_info->ifname));
+      }
                        if (strnlen(opt_info->ifname, IFNAMSIZ - 1)) {
                                if (fcoeadm_validate_interface(
                                        opt_info->ifname,
_______________________________________________
devel mailing list
[email protected]
http://www.open-fcoe.org/mailman/listinfo/devel

Reply via email to