Compare commits
9 Commits
fdab5e8c5e
...
master
Author | SHA1 | Date | |
---|---|---|---|
3c96a4bd4e
|
|||
103e532c02
|
|||
4ada8db692 | |||
![]() |
ad59739005 | ||
![]() |
ba1513796b | ||
b93a60572b
|
|||
1938d25ced
|
|||
7b7bafd5f8
|
|||
eec14b33ff
|
12
TODO.md
12
TODO.md
@@ -4,27 +4,27 @@
|
||||
|
||||
- [x] use cryptographic hashes for detecting duplicate messages
|
||||
- [x] add checking for conflicting command-line options
|
||||
- [ ] support for deletion of messages after being matched and displayed
|
||||
- [x] ignore .overview when grepping Gnus folders
|
||||
- [x] inverted matching
|
||||
- [x] recursive search through directories
|
||||
- [x] writing selected messages to a new folder
|
||||
- [x] deleting selected messages
|
||||
- [ ] basic time and date matching
|
||||
- [ ] more advanced time and date matching, with strings such as "yesterday"
|
||||
- [x] reading messages from standard input
|
||||
- [x] run-time selection of file locking method
|
||||
- [x] add a debug function
|
||||
- [ ] support for deletion of messages after being matched and displayed
|
||||
- [ ] basic time and date matching
|
||||
- [ ] more advanced time and date matching, with strings such as "yesterday"
|
||||
- [ ] Remove the option to recursively traverse directories and instruct the users to run mboxgrep in conjuction with find(1) instead.
|
||||
|
||||
## File formats, encodings and standards
|
||||
|
||||
- [x] migrate to pcre2, as pcre is obsolete
|
||||
- [x] support for compressed mbox folders
|
||||
- [x] support for bzip2 compression
|
||||
- [ ] use a more modern hash function than MD5
|
||||
- [ ] MIME support
|
||||
- [ ] support for GnuPG
|
||||
- [x] support for compressed mbox folders
|
||||
- [x] support for bzip2 compression
|
||||
- [ ] support for XZ-format compression
|
||||
- [ ] support for mail folder conversion
|
||||
- [ ] improve error detection when a directory is not a Maildir or MH folder
|
||||
@@ -34,8 +34,8 @@
|
||||
## Miscellaneous
|
||||
|
||||
- [x] write Texinfo documentation
|
||||
- [x] provide possibility to use flock() instead of fcntl()
|
||||
- [ ] configuration files
|
||||
- [ ] make use of lockfile library
|
||||
- [ ] make use of Solaris' maillock library
|
||||
- [x] provide possibility to use flock() instead of fcntl()
|
||||
- [ ] provide national language support with gettext()
|
||||
|
@@ -18,18 +18,16 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
# Yawn.
|
||||
AC_INIT([mboxgrep], [0.7.13], [dspiljar@datatipp.se], [mboxgrep], [https://www.mboxgrep.org/])
|
||||
AC_INIT([mboxgrep],[0.7.13],[dspiljar@datatipp.se],[mboxgrep],[https://www.mboxgrep.org/])
|
||||
#AM_INIT_AUTOMAKE
|
||||
AM_INIT_AUTOMAKE([foreign])
|
||||
AC_LANG([C])
|
||||
AC_CONFIG_HEADER([src/config.h])
|
||||
AC_CONFIG_HEADERS([src/config.h])
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
AC_PROG_INSTALL
|
||||
|
||||
# Checks for standard (sp?) header files
|
||||
AC_HEADER_STDC
|
||||
AC_HEADER_DIRENT
|
||||
|
||||
# Checks for libraries.
|
||||
|
@@ -1,4 +1,4 @@
|
||||
.TH MBOXGREP 1 "23 September 2024"
|
||||
.TH MBOXGREP 1 "27 September 2024"
|
||||
.SH NAME
|
||||
mboxgrep \- displays email messages matching a pattern
|
||||
.SH SYNOPSIS
|
||||
@@ -18,7 +18,7 @@ scans a
|
||||
and displays messages matching
|
||||
.I PATTERN.
|
||||
.PP
|
||||
If a mailbox name is ommited, or a single dash (-) is given instead,
|
||||
If a mailbox name is omitted, or a single dash (-) is given instead,
|
||||
it reads from standard input.
|
||||
It can read mbox folders or output from another
|
||||
.B mboxgrep
|
||||
|
@@ -52,6 +52,7 @@ char *alloca ();
|
||||
#endif
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
|
||||
/* Comment out all this code if we are using the GNU C Library, and are not
|
||||
actually compiling the library itself. This code is part of the GNU C
|
||||
|
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
mboxgrep - scan mailbox for messages matching a regular expression
|
||||
Copyright (C) 2000 - 2004, 2006, 2010, 2023 Daniel Spiljar
|
||||
Copyright (C) 2000 - 2004, 2006, 2010, 2023 - 2024 Daniel Spiljar
|
||||
|
||||
Mboxgrep is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
@@ -47,7 +47,7 @@ void
|
||||
version (void)
|
||||
{
|
||||
fprintf (stdout, "%s %s\n\n"
|
||||
"Copyright (C) 2000 - 2004, 2006, 2010, 2023 Daniel Spiljar\n"
|
||||
"Copyright (C) 2000 - 2004, 2006, 2010, 2023 - 2024 Daniel Spiljar\n"
|
||||
"This program is free software; you can redistribute it and/or "
|
||||
"modify\nit under the terms of the GNU General Public License "
|
||||
"as published by\nthe Free Software Foundation; either version "
|
||||
|
45
src/md5.c
45
src/md5.c
@@ -24,19 +24,12 @@
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
||||
#if STDC_HEADERS || defined _LIBC
|
||||
# include <stdlib.h>
|
||||
# include <string.h>
|
||||
#else
|
||||
# ifndef HAVE_MEMCPY
|
||||
# define memcpy(d, s, n) bcopy ((s), (d), (n))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include "md5.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/types.h>
|
||||
|
||||
#ifdef _LIBC
|
||||
# include <endian.h>
|
||||
# if __BYTE_ORDER == __BIG_ENDIAN
|
||||
@@ -69,8 +62,7 @@ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
|
||||
/* Initialize structure containing state of computation.
|
||||
(RFC 1321, 3.3: Step 3) */
|
||||
void
|
||||
md5_init_ctx (ctx)
|
||||
struct md5_ctx *ctx;
|
||||
md5_init_ctx (struct md5_ctx *ctx)
|
||||
{
|
||||
ctx->A = 0x67452301;
|
||||
ctx->B = 0xefcdab89;
|
||||
@@ -87,9 +79,7 @@ md5_init_ctx (ctx)
|
||||
IMPORTANT: On some systems it is required that RESBUF is correctly
|
||||
aligned for a 32 bits value. */
|
||||
void *
|
||||
md5_read_ctx (ctx, resbuf)
|
||||
const struct md5_ctx *ctx;
|
||||
void *resbuf;
|
||||
md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
|
||||
{
|
||||
((md5_uint32 *) resbuf)[0] = SWAP (ctx->A);
|
||||
((md5_uint32 *) resbuf)[1] = SWAP (ctx->B);
|
||||
@@ -105,9 +95,7 @@ md5_read_ctx (ctx, resbuf)
|
||||
IMPORTANT: On some systems it is required that RESBUF is correctly
|
||||
aligned for a 32 bits value. */
|
||||
void *
|
||||
md5_finish_ctx (ctx, resbuf)
|
||||
struct md5_ctx *ctx;
|
||||
void *resbuf;
|
||||
md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
|
||||
{
|
||||
/* Take yet unprocessed bytes into account. */
|
||||
md5_uint32 bytes = ctx->buflen;
|
||||
@@ -136,9 +124,7 @@ md5_finish_ctx (ctx, resbuf)
|
||||
resulting message digest number will be written into the 16 bytes
|
||||
beginning at RESBLOCK. */
|
||||
int
|
||||
md5_stream (stream, resblock)
|
||||
FILE *stream;
|
||||
void *resblock;
|
||||
md5_stream (FILE *stream, void *resblock)
|
||||
{
|
||||
/* Important: BLOCKSIZE must be a multiple of 64. */
|
||||
#define BLOCKSIZE 4096
|
||||
@@ -193,10 +179,7 @@ md5_stream (stream, resblock)
|
||||
output yields to the wanted ASCII representation of the message
|
||||
digest. */
|
||||
void *
|
||||
md5_buffer (buffer, len, resblock)
|
||||
const char *buffer;
|
||||
size_t len;
|
||||
void *resblock;
|
||||
md5_buffer (const char *buffer, size_t len, void *resblock)
|
||||
{
|
||||
struct md5_ctx ctx;
|
||||
|
||||
@@ -212,10 +195,7 @@ md5_buffer (buffer, len, resblock)
|
||||
|
||||
|
||||
void
|
||||
md5_process_bytes (buffer, len, ctx)
|
||||
const void *buffer;
|
||||
size_t len;
|
||||
struct md5_ctx *ctx;
|
||||
md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
|
||||
{
|
||||
//const void aligned_buffer = buffer;
|
||||
|
||||
@@ -285,10 +265,7 @@ md5_process_bytes (buffer, len, ctx)
|
||||
It is assumed that LEN % 64 == 0. */
|
||||
|
||||
void
|
||||
md5_process_block (buffer, len, ctx)
|
||||
const void *buffer;
|
||||
size_t len;
|
||||
struct md5_ctx *ctx;
|
||||
md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
|
||||
{
|
||||
md5_uint32 correct_words[16];
|
||||
const md5_uint32 *words = buffer;
|
||||
|
20
src/md5.h
20
src/md5.h
@@ -22,10 +22,7 @@
|
||||
#define _MD5_H 1
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#if defined HAVE_LIMITS_H || _LIBC
|
||||
# include <limits.h>
|
||||
#endif
|
||||
#include <limits.h>
|
||||
|
||||
/* The following contortions are an attempt to use the C preprocessor
|
||||
to determine an unsigned integral type that is 32 bits wide. An
|
||||
@@ -38,20 +35,7 @@
|
||||
# include <sys/types.h>
|
||||
typedef u_int32_t md5_uint32;
|
||||
#else
|
||||
# if defined __STDC__ && __STDC__
|
||||
# define UINT_MAX_32_BITS 4294967295U
|
||||
# else
|
||||
# define UINT_MAX_32_BITS 0xFFFFFFFF
|
||||
# endif
|
||||
|
||||
/* If UINT_MAX isn't defined, assume it's a 32-bit type.
|
||||
This should be valid for all systems GNU cares about because
|
||||
that doesn't include 16-bit systems, and only modern systems
|
||||
(that certainly have <limits.h>) have 64+-bit integral types. */
|
||||
|
||||
# ifndef UINT_MAX
|
||||
# define UINT_MAX UINT_MAX_32_BITS
|
||||
# endif
|
||||
#define UINT_MAX_32_BITS 4294967295U
|
||||
|
||||
# if UINT_MAX == UINT_MAX_32_BITS
|
||||
typedef unsigned int md5_uint32;
|
||||
|
Reference in New Issue
Block a user