[dpdk-dev] examples: optind should be reset to one not zero

Message ID 20170214220941.1178-1-keith.wiles@intel.com (mailing list archive)
State Accepted, archived
Delegated to: Thomas Monjalon
Headers

Checks

Context Check Description
ci/checkpatch success coding style OK
ci/Intel-compilation success Compilation OK

Commit Message

Wiles, Keith Feb. 14, 2017, 10:09 p.m. UTC
  Signed-off-by: Keith Wiles <keith.wiles@intel.com>
---
 app/test-pipeline/config.c                      | 2 +-
 examples/distributor/main.c                     | 2 +-
 examples/dpdk_qat/main.c                        | 2 +-
 examples/ip_fragmentation/main.c                | 2 +-
 examples/ip_pipeline/config_parse.c             | 4 ++--
 examples/ip_reassembly/main.c                   | 2 +-
 examples/ipsec-secgw/ipsec-secgw.c              | 2 +-
 examples/ipv4_multicast/main.c                  | 2 +-
 examples/l2fwd-cat/cat.c                        | 2 +-
 examples/l2fwd-crypto/main.c                    | 2 +-
 examples/l2fwd-jobstats/main.c                  | 2 +-
 examples/l2fwd-keepalive/main.c                 | 2 +-
 examples/l2fwd/main.c                           | 2 +-
 examples/l3fwd-acl/main.c                       | 2 +-
 examples/l3fwd-power/main.c                     | 2 +-
 examples/l3fwd-vf/main.c                        | 2 +-
 examples/l3fwd/main.c                           | 2 +-
 examples/link_status_interrupt/main.c           | 2 +-
 examples/load_balancer/config.c                 | 2 +-
 examples/multi_process/l2fwd_fork/main.c        | 2 +-
 examples/multi_process/symmetric_mp/main.c      | 2 +-
 examples/packet_ordering/main.c                 | 2 +-
 examples/performance-thread/l3fwd-thread/main.c | 2 +-
 examples/ptpclient/ptpclient.c                  | 2 +-
 examples/qos_meter/main.c                       | 2 +-
 25 files changed, 26 insertions(+), 26 deletions(-)
  

Comments

Thomas Monjalon March 9, 2017, 8:41 p.m. UTC | #1
2017-02-14 16:09, Keith Wiles:
> Signed-off-by: Keith Wiles <keith.wiles@intel.com>

Please, could explain and describe what was the consequence of this
wrong reset value?
You can just reply and I will integrate it in the commit when applying.
Thanks
  
Wiles, Keith March 9, 2017, 9:11 p.m. UTC | #2
> On Mar 9, 2017, at 2:41 PM, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:

> 

> 2017-02-14 16:09, Keith Wiles:

>> Signed-off-by: Keith Wiles <keith.wiles@intel.com>

> 

> Please, could explain and describe what was the consequence of this

> wrong reset value?

> You can just reply and I will integrate it in the commit when applying.


Here is the man page text:

"The variable optind is the index of the next element to be processed in argv.  The system initializes this  value  to  1.
The caller can reset it to 1 to restart scanning of the same argv, or when scanning a new argument vector.”

The problem I saw with my application was trying to parse the wrong option, which can happen as DPDK parses the first part of the command line and the application parses the second part. If you call getopt() multiple times in the same execution, the behavior is not maintained when using zero for optind.


— Do not put the next part in the commit message unless you want — 
As a side note it appears MacOS is much more picky about trying to use optind of zero and not one. I would get a segfault on DPDK running in MacOS and I assumed Linux/FreeBSD could be fixing optind internally, but it is best to set the correct value in all cases.

I hope that helps.


> Thanks

> 


Regards,
Keith
  
Thomas Monjalon March 10, 2017, 2:41 p.m. UTC | #3
2017-03-09 21:11, Wiles, Keith:
> 
> > On Mar 9, 2017, at 2:41 PM, Thomas Monjalon <thomas.monjalon@6wind.com> wrote:
> > 
> > 2017-02-14 16:09, Keith Wiles:
> >> Signed-off-by: Keith Wiles <keith.wiles@intel.com>
> > 
> > Please, could explain and describe what was the consequence of this
> > wrong reset value?
> > You can just reply and I will integrate it in the commit when applying.
> 
> Here is the man page text:
> 
> "The variable optind is the index of the next element to be processed in argv.  The system initializes this  value  to  1.
> The caller can reset it to 1 to restart scanning of the same argv, or when scanning a new argument vector.”
> 
> The problem I saw with my application was trying to parse the wrong option, which can happen as DPDK parses the first part of the command line and the application parses the second part. If you call getopt() multiple times in the same execution, the behavior is not maintained when using zero for optind.
> 
> 
> — Do not put the next part in the commit message unless you want — 
> As a side note it appears MacOS is much more picky about trying to use optind of zero and not one. I would get a segfault on DPDK running in MacOS and I assumed Linux/FreeBSD could be fixing optind internally, but it is best to set the correct value in all cases.
> 
> I hope that helps.

Applied with this explanation integrated, thanks.
  

Patch

diff --git a/app/test-pipeline/config.c b/app/test-pipeline/config.c
index dd80ed6..1b397c0 100644
--- a/app/test-pipeline/config.c
+++ b/app/test-pipeline/config.c
@@ -259,6 +259,6 @@  app_parse_args(int argc, char **argv)
 		argv[optind - 1] = prgname;
 
 	ret = optind - 1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
diff --git a/examples/distributor/main.c b/examples/distributor/main.c
index e7641d2..7b8a759 100644
--- a/examples/distributor/main.c
+++ b/examples/distributor/main.c
@@ -487,7 +487,7 @@  parse_args(int argc, char **argv)
 
 	argv[optind-1] = prgname;
 
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return 0;
 }
 
diff --git a/examples/dpdk_qat/main.c b/examples/dpdk_qat/main.c
index aa9b1d5..a96119c 100644
--- a/examples/dpdk_qat/main.c
+++ b/examples/dpdk_qat/main.c
@@ -582,7 +582,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/ip_fragmentation/main.c b/examples/ip_fragmentation/main.c
index e1e32c6..9e9ecae 100644
--- a/examples/ip_fragmentation/main.c
+++ b/examples/ip_fragmentation/main.c
@@ -586,7 +586,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/ip_pipeline/config_parse.c b/examples/ip_pipeline/config_parse.c
index 8b372e9..3ae7d48 100644
--- a/examples/ip_pipeline/config_parse.c
+++ b/examples/ip_pipeline/config_parse.c
@@ -1,4 +1,4 @@ 
-/*-
+/*-
  *   BSD LICENSE
  *
  *   Copyright(c) 2010-2016 Intel Corporation. All rights reserved.
@@ -3407,7 +3407,7 @@  app_config_args(struct app_params *app, int argc, char **argv)
 			app_print_usage(argv[0]);
 		}
 
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 
 	/* Check dependencies between args */
 	if (preproc_params_present && (preproc_present == 0))
diff --git a/examples/ip_reassembly/main.c b/examples/ip_reassembly/main.c
index 50fe422..e62674c 100644
--- a/examples/ip_reassembly/main.c
+++ b/examples/ip_reassembly/main.c
@@ -718,7 +718,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/ipsec-secgw/ipsec-secgw.c b/examples/ipsec-secgw/ipsec-secgw.c
index 5a4c9b7..685feec 100644
--- a/examples/ipsec-secgw/ipsec-secgw.c
+++ b/examples/ipsec-secgw/ipsec-secgw.c
@@ -1039,7 +1039,7 @@  parse_args(int32_t argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/ipv4_multicast/main.c b/examples/ipv4_multicast/main.c
index 708d76e..b681f8e 100644
--- a/examples/ipv4_multicast/main.c
+++ b/examples/ipv4_multicast/main.c
@@ -575,7 +575,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l2fwd-cat/cat.c b/examples/l2fwd-cat/cat.c
index bad3930..6133bf5 100644
--- a/examples/l2fwd-cat/cat.c
+++ b/examples/l2fwd-cat/cat.c
@@ -686,7 +686,7 @@  parse_args(int argc, char **argv)
 
 exit:
 	/* reset getopt lib */
-	optind = 0;
+	optind = 1;
 
 	/* Restore opterr value */
 	opterr = oldopterr;
diff --git a/examples/l2fwd-crypto/main.c b/examples/l2fwd-crypto/main.c
index 62ee933..bd21dba 100644
--- a/examples/l2fwd-crypto/main.c
+++ b/examples/l2fwd-crypto/main.c
@@ -1450,7 +1450,7 @@  l2fwd_crypto_parse_args(struct l2fwd_crypto_options *options,
 		argv[optind-1] = prgname;
 
 	retval = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 
 	return retval;
 }
diff --git a/examples/l2fwd-jobstats/main.c b/examples/l2fwd-jobstats/main.c
index dd9201b..eae7a13 100644
--- a/examples/l2fwd-jobstats/main.c
+++ b/examples/l2fwd-jobstats/main.c
@@ -709,7 +709,7 @@  l2fwd_parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l2fwd-keepalive/main.c b/examples/l2fwd-keepalive/main.c
index 60cccdb..068f4e5 100644
--- a/examples/l2fwd-keepalive/main.c
+++ b/examples/l2fwd-keepalive/main.c
@@ -464,7 +464,7 @@  l2fwd_parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l2fwd/main.c b/examples/l2fwd/main.c
index 97d6454..ffcf109 100644
--- a/examples/l2fwd/main.c
+++ b/examples/l2fwd/main.c
@@ -475,7 +475,7 @@  l2fwd_parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l3fwd-acl/main.c b/examples/l3fwd-acl/main.c
index 3cfbb40..0e3daad 100644
--- a/examples/l3fwd-acl/main.c
+++ b/examples/l3fwd-acl/main.c
@@ -1776,7 +1776,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l3fwd-power/main.c b/examples/l3fwd-power/main.c
index 15b47c7..978631c 100644
--- a/examples/l3fwd-power/main.c
+++ b/examples/l3fwd-power/main.c
@@ -1361,7 +1361,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l3fwd-vf/main.c b/examples/l3fwd-vf/main.c
index f56e8db..dc3d547 100644
--- a/examples/l3fwd-vf/main.c
+++ b/examples/l3fwd-vf/main.c
@@ -816,7 +816,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/l3fwd/main.c b/examples/l3fwd/main.c
index a50d628..3ce1b65 100644
--- a/examples/l3fwd/main.c
+++ b/examples/l3fwd/main.c
@@ -688,7 +688,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/link_status_interrupt/main.c b/examples/link_status_interrupt/main.c
index 14a038b..97379fa 100644
--- a/examples/link_status_interrupt/main.c
+++ b/examples/link_status_interrupt/main.c
@@ -451,7 +451,7 @@  lsi_parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/load_balancer/config.c b/examples/load_balancer/config.c
index 157fd52..07f92a1 100644
--- a/examples/load_balancer/config.c
+++ b/examples/load_balancer/config.c
@@ -758,7 +758,7 @@  app_parse_args(int argc, char **argv)
 		argv[optind - 1] = prgname;
 
 	ret = optind - 1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/multi_process/l2fwd_fork/main.c b/examples/multi_process/l2fwd_fork/main.c
index 2d951d9..08df942 100644
--- a/examples/multi_process/l2fwd_fork/main.c
+++ b/examples/multi_process/l2fwd_fork/main.c
@@ -865,7 +865,7 @@  l2fwd_parse_args(int argc, char **argv)
 		return -1;
 	}
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/multi_process/symmetric_mp/main.c b/examples/multi_process/symmetric_mp/main.c
index d30ff4a..75a5272 100644
--- a/examples/multi_process/symmetric_mp/main.c
+++ b/examples/multi_process/symmetric_mp/main.c
@@ -193,7 +193,7 @@  smp_parse_args(int argc, char **argv)
 			ports[num_ports++] = (uint8_t)i;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 
 	return ret;
 }
diff --git a/examples/packet_ordering/main.c b/examples/packet_ordering/main.c
index d4dc789..a448039 100644
--- a/examples/packet_ordering/main.c
+++ b/examples/packet_ordering/main.c
@@ -216,7 +216,7 @@  parse_args(int argc, char **argv)
 	}
 
 	argv[optind-1] = prgname;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return 0;
 }
 
diff --git a/examples/performance-thread/l3fwd-thread/main.c b/examples/performance-thread/l3fwd-thread/main.c
index 53083df..6845e28 100644
--- a/examples/performance-thread/l3fwd-thread/main.c
+++ b/examples/performance-thread/l3fwd-thread/main.c
@@ -3052,7 +3052,7 @@  parse_args(int argc, char **argv)
 		argv[optind-1] = prgname;
 
 	ret = optind-1;
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return ret;
 }
 
diff --git a/examples/ptpclient/ptpclient.c b/examples/ptpclient/ptpclient.c
index 0af4f3b..a80961d 100644
--- a/examples/ptpclient/ptpclient.c
+++ b/examples/ptpclient/ptpclient.c
@@ -708,7 +708,7 @@  ptp_parse_args(int argc, char **argv)
 
 	argv[optind-1] = prgname;
 
-	optind = 0; /* Reset getopt lib. */
+	optind = 1; /* Reset getopt lib. */
 
 	return 0;
 }
diff --git a/examples/qos_meter/main.c b/examples/qos_meter/main.c
index 1565615..abe5eb8 100644
--- a/examples/qos_meter/main.c
+++ b/examples/qos_meter/main.c
@@ -300,7 +300,7 @@  parse_args(int argc, char **argv)
 
 	argv[optind-1] = prgname;
 
-	optind = 0; /* reset getopt lib */
+	optind = 1; /* reset getopt lib */
 	return 0;
 }