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