Skip to content

Commit

Permalink
Don't use '-' in option string to getopt().
Browse files Browse the repository at this point in the history
@dram reported a build failure in FreeBSD at
#1 (comment)

Linux manual for getopt(3) says:
> If the first character of optstring is '-', then each nonoption
> argv-element is handled as if it were the argument of an option with
> character code 1....
>
> The use of '+' and '-' in optstring is a GNU extension.

GNU/Linux and OpenBSD handle '-' in this special way, but FreeBSD
seems not to.  If '-' is not special, then em_ego can't find its input
file, so the build must fail.  This commit stops using '-' in both
em_b and em_ego, but doesn't change mcg.

Also fix em_ego -O3 to not act like -O4.
  • Loading branch information
kernigh committed Oct 30, 2017
1 parent 59b3c10 commit 50a7031
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 12 deletions.
16 changes: 12 additions & 4 deletions lang/b/compiler/b0.c
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,19 @@ init(char *s, int val)
np->offset = val;
}

static void
usage(void)
{
error("Usage: em_b [-w wordsize] [-B modulename] [-i inputfile] [-o outputfile]");
exit(1);
}

int
main(int argc, char *argv[])
{

for (;;) {
int opt = getopt(argc, argv, "-w:B:i:o:");
int opt = getopt(argc, argv, "w:B:i:o:");
if (opt == -1)
break;

Expand All @@ -66,11 +73,12 @@ main(int argc, char *argv[])
}
break;

derfault:
error("Usage: em_b [-w wordsize] [-B modulename] [-i inputfile] [-o outputfile]");
exit(1);
default:
usage();
}
}
if (optind < argc)
usage();

init("auto", AUTO);
init("extrn", EXTERN);
Expand Down
16 changes: 8 additions & 8 deletions util/ego/em_ego/em_ego.c
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ int main(int argc, char* argv[])
opterr = 0;
for (;;)
{
int opt = getopt(argc, argv, "-M:P:O:vt");
int opt = getopt(argc, argv, "M:P:O:vt");
if (opt == -1)
break;

Expand All @@ -364,17 +364,14 @@ int main(int argc, char* argv[])
{
int o = atoi(optarg);
if (o <= 2)
break;
if (o <= 3)
Ophase = &O2phases[0];
else if (o == 3)
Ophase = &O3phases[0];
Ophase = &O4phases[0];
else
Ophase = &O4phases[0];
break;
}

case 1:
add_file(optarg);
break;

case 't':
keeptemps = 1;
goto addopt;
Expand All @@ -390,6 +387,9 @@ int main(int argc, char* argv[])
}
}

for (i = optind; i < argc; i++)
add_file(argv[i]);

phase_args[nphase_args] = 0;
if (nuphases)
Ophase = uphases;
Expand Down

0 comments on commit 50a7031

Please sign in to comment.