Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- /* using fopen, fclose, fprintf, perror */
- #include <wctype.h>
- /* using iswxdigit */
- #include <wchar.h>
- /* using fputws, fgetws */
- #include <stdlib.h>
- /* using getenv */
- #include <locale.h>
- /* using setlocale */
- static const char* LOG_FILE = "LogFile_ProxyBufferContents_FJ_small.html";
- static const char* OUT_FILE = "LogFile_ProxyBufferContents_FJ_small_out.html";
- #define BUF_SIZE 4096
- static int is_hex_line(const wchar_t* buf)
- {
- for(const wchar_t* pos = buf; ; ++pos) {
- switch(*pos) {
- case L'\r':
- case L'\n':
- case L'\0':
- /* return false on empty line, true otherwise */
- return pos != buf;
- default:
- if(! iswxdigit(*pos))
- return 0;
- break;
- }
- }
- }
- static void filter_file(FILE* input, FILE* output)
- {
- wchar_t in_buf[BUF_SIZE];
- wchar_t* buf_alias = in_buf;
- while((buf_alias = fgetws(buf_alias, BUF_SIZE, input)) != NULL) {
- if(! is_hex_line(buf_alias))
- fputws(buf_alias, output);
- }
- }
- static void set_locale()
- {
- const char* env = "LC_CTYPE";
- const char* val = getenv(env);
- if(! val) {
- val = "en_US.UTF8";
- fprintf(stderr, "Guessing locale as %s\n", val);
- }
- if(! setlocale(LC_CTYPE, val))
- fprintf(stderr, "Cannot set locate defined in %s. Continue anyway\n", env);
- }
- int main(void)
- {
- set_locale();
- FILE* input = fopen(LOG_FILE, "r");
- if(! input)
- return 1;
- FILE* output = fopen(OUT_FILE, "w");
- if(! output)
- return 1;
- filter_file(input, output);
- if(ferror(input))
- perror("Input error");
- fclose(output);
- fclose(input);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement