Date: Fri, 1 Nov 2019 00:56:18 -0400 From: Kurt Hackenberg <kh@panix.com> To: freebsd-questions@freebsd.org Subject: Re: grep for ascii nul Message-ID: <61f96c80-7965-9c80-30dc-b153e418b668@panix.com> In-Reply-To: <558fd145-ad3e-90dc-5930-c01ca0c27d3c@panix.com> References: <20191101024817.GA60134@admin.sibptus.ru> <558fd145-ad3e-90dc-5930-c01ca0c27d3c@panix.com>
next in thread | previous in thread | raw e-mail | index | archive | help
On 2019-11-01 00:44, Kurt Hackenberg wrote: > You could use the attached program, which I wrote some time ago for this > purpose. Huh. The attachment didn't come through. Does this list forbid attachments? Anyway, here's the program inline. It's C. ---------------------------- #include <stdio.h> #include <errno.h> #include <string.h> typedef int BOOL; #define TRUE 1 #define FALSE 0 static void qerror(char *me, char *thing) { char tmp[1024 + 255 + 2 + 1]; /* max pathname + max filename + junk + NUL */ sprintf(tmp, "%s: %s", me, thing); perror(tmp); } static BOOL doit(FILE *fin) { int c; while ((c = getc(fin)) != EOF) if (c == '\0') return TRUE; return FALSE; } int main(int argc, char *argv[], char *envp[]) { FILE *fin; char *me; if ((me = strrchr(*argv, '/')) != NULL) me++; else me = *argv; argc--, argv++; if (argc > 0) do { if ((fin = fopen(*argv, "r")) != NULL) { if (doit(fin)) printf("%s\n", *argv); if (fclose(fin) != 0) qerror(me, *argv); } else qerror(me, *argv); } while (++argv, --argc > 0); else if (doit(stdin)) printf("<stdin>\n"); return errno; }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?61f96c80-7965-9c80-30dc-b153e418b668>