=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/m4/gnum4.c,v retrieving revision 1.39 retrieving revision 1.40 diff -c -r1.39 -r1.40 *** src/usr.bin/m4/gnum4.c 2008/08/21 21:01:04 1.39 --- src/usr.bin/m4/gnum4.c 2010/03/22 20:40:43 1.40 *************** *** 1,4 **** ! /* $OpenBSD: gnum4.c,v 1.39 2008/08/21 21:01:04 espie Exp $ */ /* * Copyright (c) 1999 Marc Espie --- 1,4 ---- ! /* $OpenBSD: gnum4.c,v 1.40 2010/03/22 20:40:43 espie Exp $ */ /* * Copyright (c) 1999 Marc Espie *************** *** 444,450 **** if (argv[3][0] == '\0') { const char *s; size_t len; ! if (argv[4] && argc > 4) len = strlen(argv[4]); else len = 0; --- 444,450 ---- if (argv[3][0] == '\0') { const char *s; size_t len; ! if (argc > 4 && argv[4]) len = strlen(argv[4]); else len = 0; *************** *** 489,501 **** warnx("Too few arguments to regexp"); return; } error = regcomp(&re, mimic_gnu ? twiddle(argv[3]) : argv[3], REG_EXTENDED); if (error != 0) exit_regerror(error, &re); pmatch = xalloc(sizeof(regmatch_t) * (re.re_nsub+1), NULL); ! if (argv[4] == NULL || argc == 4) do_regexpindex(argv[2], &re, pmatch); else do_regexp(argv[2], &re, argv[4], pmatch); --- 489,508 ---- warnx("Too few arguments to regexp"); return; } + /* special gnu case */ + if (argv[3][0] == '\0' && mimic_gnu) { + if (argc == 4 || argv[4] == NULL) + return; + else + pbstr(argv[4]); + } error = regcomp(&re, mimic_gnu ? twiddle(argv[3]) : argv[3], REG_EXTENDED); if (error != 0) exit_regerror(error, &re); pmatch = xalloc(sizeof(regmatch_t) * (re.re_nsub+1), NULL); ! if (argc == 4 || argv[4] == NULL) do_regexpindex(argv[2], &re, pmatch); else do_regexp(argv[2], &re, argv[4], pmatch);