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