Fix handling of '-' option and way that variables are added to the
environment from Jonas Holmberg <jonas.holmberg@axis.com>.  Fix
handling of command options by adding + to getopt string.
diff --git a/coreutils/env.c b/coreutils/env.c
index 56577b6..aca7c3a 100644
--- a/coreutils/env.c
+++ b/coreutils/env.c
@@ -35,14 +35,13 @@
 {
 	char **ep, *p;
 	char *cleanenv[1];
+	int ignore_environment = 0;
 	int ch;
 
-	while ((ch = getopt(argc, argv, "-iu:")) != -1)
+	while ((ch = getopt(argc, argv, "+iu:")) != -1) {
 		switch(ch) {
-		case '-':
 		case 'i':
-			environ = cleanenv;
-			cleanenv[0] = NULL;
+			ignore_environment = 1;
 			break;
 		case 'u':
 			unsetenv(optarg);
@@ -50,15 +49,24 @@
 		default:
 			show_usage();
 		}
+	}
+	if (optind != argc && !strcmp(argv[optind], "-")) {
+		ignore_environment = 1;
+		argv++;
+	}
+	if (ignore_environment) {
+		environ = cleanenv;
+		cleanenv[0] = NULL;
+	}
 	for (argv += optind; *argv && (p = strchr(*argv, '=')); ++argv)
-		setenv(*argv, ++p, 1);
+		putenv(*argv);
 	if (*argv) {
 		execvp(*argv, argv);
 		perror_msg_and_die("%s", *argv);
 	}
 	for (ep = environ; *ep; ep++)
 		printf("%s\n", *ep);
-	exit(EXIT_SUCCESS);
+	return 0;
 }
 
 /*