~mdw
/
catacomb
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Document encode and decode commands.
[catacomb]
/
hashsum.c
diff --git
a/hashsum.c
b/hashsum.c
index
dbb6662
..
c9bb3ec
100644
(file)
--- a/
hashsum.c
+++ b/
hashsum.c
@@
-51,6
+51,7
@@
#include <mLib/base64.h>
#include "ghash.h"
#include <mLib/base64.h>
#include "ghash.h"
+#include "cc.h"
/*----- Static variables --------------------------------------------------*/
/*----- Static variables --------------------------------------------------*/
@@
-164,24
+165,24
@@
static size_t getb32(const char *p, octet *q, size_t sz, char **pp)
/* --- Table --- */
/* --- Table --- */
-typedef struct encops {
+typedef struct enco
deo
ps {
const char *name;
void (*put)(const octet *, size_t, FILE *);
size_t (*get)(const char *, octet *, size_t, char **);
const char *name;
void (*put)(const octet *, size_t, FILE *);
size_t (*get)(const char *, octet *, size_t, char **);
-} encops;
+} enco
deo
ps;
-static const enco
ps enc
tab[] = {
+static const enco
deops encoding
tab[] = {
{ "hex", puthex, gethex },
{ "base64", putb64, getb64 },
{ "base32", putb32, getb32 },
{ 0, 0, 0 }
};
{ "hex", puthex, gethex },
{ "base64", putb64, getb64 },
{ "base32", putb32, getb32 },
{ 0, 0, 0 }
};
-static const enco
ps *getenc
(const char *ename)
+static const enco
deops *getencoding
(const char *ename)
{
{
- const encops *e;
+ const enco
deo
ps *e;
- for (e = enctab; e->name; e++) {
+ for (e = enc
oding
tab; e->name; e++) {
if (strcmp(ename, e->name) == 0)
return (e);
}
if (strcmp(ename, e->name) == 0)
return (e);
}
@@
-431,7
+432,7
@@
static void putstring(FILE *fp, const char *p, unsigned raw)
/*----- Guts --------------------------------------------------------------*/
static int checkhash(const char *file, unsigned f,
/*----- Guts --------------------------------------------------------------*/
static int checkhash(const char *file, unsigned f,
- const gchash *gch, const encops *e)
+ const gchash *gch, const enco
deo
ps *e)
{
int rc;
FILE *fp;
{
int rc;
FILE *fp;
@@
-468,10
+469,10
@@
static int checkhash(const char *file, unsigned f,
xfree(buf);
buf = xmalloc(2 * gch->hashsz);
} else if (strcmp(q, "encoding") == 0) {
xfree(buf);
buf = xmalloc(2 * gch->hashsz);
} else if (strcmp(q, "encoding") == 0) {
- const encops *ee;
+ const enco
deo
ps *ee;
if ((q = str_getword(&p)) == 0)
continue;
if ((q = str_getword(&p)) == 0)
continue;
- if ((ee = getenc(q)) == 0)
+ if ((ee = getenc
oding
(q)) == 0)
continue;
e = ee;
} else if (strcmp(q, "escape") == 0)
continue;
e = ee;
} else if (strcmp(q, "escape") == 0)
@@
-531,7
+532,7
@@
static int checkhash(const char *file, unsigned f,
}
static int dohash(const char *file, unsigned f,
}
static int dohash(const char *file, unsigned f,
- const gchash *gch, const encops *e)
+ const gchash *gch, const enco
deo
ps *e)
{
int rc = 0;
octet *p = xmalloc(gch->hashsz);
{
int rc = 0;
octet *p = xmalloc(gch->hashsz);
@@
-557,13
+558,13
@@
static int dohash(const char *file, unsigned f,
}
static int dofile(const char *file, unsigned f,
}
static int dofile(const char *file, unsigned f,
- const gchash *gch, const encops *e)
+ const gchash *gch, const enco
deo
ps *e)
{
return (f & f_check ? checkhash : dohash)(file, f, gch, e);
}
static int hashfiles(const char *file, unsigned f,
{
return (f & f_check ? checkhash : dohash)(file, f, gch, e);
}
static int hashfiles(const char *file, unsigned f,
- const gchash *gch, const encops *e)
+ const gchash *gch, const enco
deo
ps *e)
{
FILE *fp;
dstr d = DSTR_INIT;
{
FILE *fp;
dstr d = DSTR_INIT;
@@
-589,21
+590,21
@@
static int hashfiles(const char *file, unsigned f,
}
static int hashsum(const char *file, unsigned f,
}
static int hashsum(const char *file, unsigned f,
- const gchash *gch, const encops *e)
+ const gchash *gch, const enco
deo
ps *e)
{
return (f & f_files ? hashfiles : dofile)(file, f, gch, e);
}
/*----- Main driver -------------------------------------------------------*/
{
return (f & f_files ? hashfiles : dofile)(file, f, gch, e);
}
/*----- Main driver -------------------------------------------------------*/
-
static
void version(FILE *fp)
+void version(FILE *fp)
{
pquis(fp, "$, Catacomb version " VERSION "\n");
}
static void usage(FILE *fp)
{
{
pquis(fp, "$, Catacomb version " VERSION "\n");
}
static void usage(FILE *fp)
{
- pquis(fp, "Usage: $ [-f0ebcv] [-a
algorithm] [files
...]\n");
+ pquis(fp, "Usage: $ [-f0ebcv] [-a
ALGORITHM] [-E ENC] [FILES
...]\n");
}
static void help(FILE *fp, const gchash *gch)
}
static void help(FILE *fp, const gchash *gch)
@@
-617,8
+618,10
@@
Generates or checks message digests on files. Options available:\n\
-h, --help Display this help message.\n\
-V, --version Display program's version number.\n\
-u, --usage Display a terse usage message.\n\
-h, --help Display this help message.\n\
-V, --version Display program's version number.\n\
-u, --usage Display a terse usage message.\n\
+-l, --list [ITEM...] Show known hash functions and/or encodings.\n\
\n\
-a, --algorithm=ALG Use the message digest algorithm ALG.\n\
\n\
-a, --algorithm=ALG Use the message digest algorithm ALG.\n\
+-E, --encoding=ENC Represent hashes using encoding ENC.\n\
\n\
-f, --files Read a list of file names from standard input.\n\
-0, --null File names are null terminated, not plain text.\n\
\n\
-f, --files Read a list of file names from standard input.\n\
-0, --null File names are null terminated, not plain text.\n\
@@
-628,17
+631,24
@@
Generates or checks message digests on files. Options available:\n\
-b, --binary When reading files, treat them as binary.\n\
-v, --verbose Be verbose when checking digests.\n\
\n\
-b, --binary When reading files, treat them as binary.\n\
-v, --verbose Be verbose when checking digests.\n\
\n\
-For a list of
supported message digest algorithm
s, type `$ --list'.\n\
+For a list of
hashing algorithms and encoding
s, type `$ --list'.\n\
");
if (gch)
fprintf(fp, "The default message digest algorithm is %s.\n", gch->name);
}
");
if (gch)
fprintf(fp, "The default message digest algorithm is %s.\n", gch->name);
}
+#define LISTS(LI) \
+ LI("Lists", list, listtab[i].name, listtab[i].name) \
+ LI("Hash functions", hash, ghashtab[i], ghashtab[i]->name) \
+ LI("Encodings", enc, encodingtab[i].name, encodingtab[i].name)
+
+MAKELISTTAB(listtab, LISTS)
+
int main(int argc, char *argv[])
{
unsigned f = 0;
const gchash *gch = 0;
int main(int argc, char *argv[])
{
unsigned f = 0;
const gchash *gch = 0;
- const enco
ps *e = &enc
tab[0];
+ const enco
deops *e = &encoding
tab[0];
int rc;
/* --- Initialization --- */
int rc;
/* --- Initialization --- */
@@
-698,23
+708,15
@@
int main(int argc, char *argv[])
case 'u':
usage(stdout);
exit(0);
case 'u':
usage(stdout);
exit(0);
+ case 'l':
+ exit(displaylists(listtab, argv + optind));
case 'a':
if ((gch = gethash(optarg)) == 0)
die(EXIT_FAILURE, "unknown hash algorithm `%s'", optarg);
f |= f_oddhash;
break;
case 'a':
if ((gch = gethash(optarg)) == 0)
die(EXIT_FAILURE, "unknown hash algorithm `%s'", optarg);
f |= f_oddhash;
break;
- case 'l': {
- unsigned j;
- for (j = 0; ghashtab[j]; j++) {
- if (j)
- fputc(' ', stdout);
- printf("%s", ghashtab[j]->name);
- }
- fputc('\n', stdout);
- exit(0);
- } break;
case 'E':
case 'E':
- if ((e = getenc(optarg)) == 0)
+ if ((e = getenc
oding
(optarg)) == 0)
die(EXIT_FAILURE, "unknown encoding `%s'", optarg);
f |= f_oddenc;
break;
die(EXIT_FAILURE, "unknown encoding `%s'", optarg);
f |= f_oddenc;
break;
@@
-751,22
+753,23
@@
int main(int argc, char *argv[])
/* --- Generate output --- */
/* --- Generate output --- */
- if (!(f & f_check)) {
- if (f & f_oddhash) printf("#hash %s\n", gch->name);
- if (f & f_oddenc) printf("#encoding %s\n", e->name);
- if (f & f_escape) fputs("#escape\n", stdout);
- }
-
- if (argc) {
+ if (!argc)
+ rc = hashsum(0, f, gch, e);
+ else {
int i;
int rrc;
int i;
int rrc;
+
rc = 0;
rc = 0;
+ if (!(f & f_check)) {
+ if (f & f_oddhash) printf("#hash %s\n", gch->name);
+ if (f & f_oddenc) printf("#encoding %s\n", e->name);
+ if (f & f_escape) fputs("#escape\n", stdout);
+ }
for (i = 0; i < argc; i++) {
if ((rrc = hashsum(argv[i], f, gch, e)) != 0)
rc = rrc;
}
for (i = 0; i < argc; i++) {
if ((rrc = hashsum(argv[i], f, gch, e)) != 0)
rc = rrc;
}
- } else
- rc = hashsum(0, f, gch, e);
+ }
return (rc);
}
return (rc);
}