1*6a54128fSAndroid Build Coastguard Worker /*
2*6a54128fSAndroid Build Coastguard Worker * feature.c --- convert between features and strings
3*6a54128fSAndroid Build Coastguard Worker *
4*6a54128fSAndroid Build Coastguard Worker * Copyright (C) 1999 Theodore Ts'o <[email protected]>
5*6a54128fSAndroid Build Coastguard Worker *
6*6a54128fSAndroid Build Coastguard Worker * %Begin-Header%
7*6a54128fSAndroid Build Coastguard Worker * This file may be redistributed under the terms of the GNU Library
8*6a54128fSAndroid Build Coastguard Worker * General Public License, version 2.
9*6a54128fSAndroid Build Coastguard Worker * %End-Header%
10*6a54128fSAndroid Build Coastguard Worker */
11*6a54128fSAndroid Build Coastguard Worker
12*6a54128fSAndroid Build Coastguard Worker #include "config.h"
13*6a54128fSAndroid Build Coastguard Worker #include <stdio.h>
14*6a54128fSAndroid Build Coastguard Worker #include <stdlib.h>
15*6a54128fSAndroid Build Coastguard Worker #include <string.h>
16*6a54128fSAndroid Build Coastguard Worker #include <ctype.h>
17*6a54128fSAndroid Build Coastguard Worker #include <errno.h>
18*6a54128fSAndroid Build Coastguard Worker
19*6a54128fSAndroid Build Coastguard Worker #include "e2p.h"
20*6a54128fSAndroid Build Coastguard Worker
21*6a54128fSAndroid Build Coastguard Worker struct hash {
22*6a54128fSAndroid Build Coastguard Worker int num;
23*6a54128fSAndroid Build Coastguard Worker const char *string;
24*6a54128fSAndroid Build Coastguard Worker };
25*6a54128fSAndroid Build Coastguard Worker
26*6a54128fSAndroid Build Coastguard Worker static struct hash hash_list[] = {
27*6a54128fSAndroid Build Coastguard Worker { EXT2_HASH_LEGACY, "legacy" },
28*6a54128fSAndroid Build Coastguard Worker { EXT2_HASH_HALF_MD4, "half_md4" },
29*6a54128fSAndroid Build Coastguard Worker { EXT2_HASH_TEA, "tea" },
30*6a54128fSAndroid Build Coastguard Worker { 0, 0 },
31*6a54128fSAndroid Build Coastguard Worker };
32*6a54128fSAndroid Build Coastguard Worker
e2p_hash2string(int num)33*6a54128fSAndroid Build Coastguard Worker const char *e2p_hash2string(int num)
34*6a54128fSAndroid Build Coastguard Worker {
35*6a54128fSAndroid Build Coastguard Worker struct hash *p;
36*6a54128fSAndroid Build Coastguard Worker static char buf[20];
37*6a54128fSAndroid Build Coastguard Worker
38*6a54128fSAndroid Build Coastguard Worker for (p = hash_list; p->string; p++) {
39*6a54128fSAndroid Build Coastguard Worker if (num == p->num)
40*6a54128fSAndroid Build Coastguard Worker return p->string;
41*6a54128fSAndroid Build Coastguard Worker }
42*6a54128fSAndroid Build Coastguard Worker sprintf(buf, "HASHALG_%d", num);
43*6a54128fSAndroid Build Coastguard Worker return buf;
44*6a54128fSAndroid Build Coastguard Worker }
45*6a54128fSAndroid Build Coastguard Worker
46*6a54128fSAndroid Build Coastguard Worker /*
47*6a54128fSAndroid Build Coastguard Worker * Returns the hash algorithm, or -1 on error
48*6a54128fSAndroid Build Coastguard Worker */
e2p_string2hash(char * string)49*6a54128fSAndroid Build Coastguard Worker int e2p_string2hash(char *string)
50*6a54128fSAndroid Build Coastguard Worker {
51*6a54128fSAndroid Build Coastguard Worker struct hash *p;
52*6a54128fSAndroid Build Coastguard Worker char *eptr;
53*6a54128fSAndroid Build Coastguard Worker int num;
54*6a54128fSAndroid Build Coastguard Worker
55*6a54128fSAndroid Build Coastguard Worker for (p = hash_list; p->string; p++) {
56*6a54128fSAndroid Build Coastguard Worker if (!strcasecmp(string, p->string)) {
57*6a54128fSAndroid Build Coastguard Worker return p->num;
58*6a54128fSAndroid Build Coastguard Worker }
59*6a54128fSAndroid Build Coastguard Worker }
60*6a54128fSAndroid Build Coastguard Worker if (strncasecmp(string, "HASHALG_", 8))
61*6a54128fSAndroid Build Coastguard Worker return -1;
62*6a54128fSAndroid Build Coastguard Worker
63*6a54128fSAndroid Build Coastguard Worker if (string[8] == 0)
64*6a54128fSAndroid Build Coastguard Worker return -1;
65*6a54128fSAndroid Build Coastguard Worker num = strtol(string+8, &eptr, 10);
66*6a54128fSAndroid Build Coastguard Worker if (num > 255 || num < 0)
67*6a54128fSAndroid Build Coastguard Worker return -1;
68*6a54128fSAndroid Build Coastguard Worker if (*eptr)
69*6a54128fSAndroid Build Coastguard Worker return -1;
70*6a54128fSAndroid Build Coastguard Worker return num;
71*6a54128fSAndroid Build Coastguard Worker }
72*6a54128fSAndroid Build Coastguard Worker
73