busybox/e2fsprogs/old_e2fsprogs/e2p/hashstr.c
<<
>>
Prefs
   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
  20struct hash {
  21        int num;
  22        const char *string;
  23};
  24
  25static 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
  32const 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 */
  48int 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}
  71