File: sense_decode.c

package info (click to toggle)
diskscan 0.21-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,656 kB
  • sloc: ansic: 11,136; python: 338; xml: 138; sh: 41; makefile: 36
file content (50 lines) | stat: -rw-r--r-- 1,733 bytes parent folder | download | duplicates (9)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include "sense_dump.h"
#include <stdio.h>
#include <stdbool.h>

int main(int argc, char **argv)
{
        unsigned char sense[256];
        int sense_len = 0;

        printf("Reading sense from args to buffer...\n");
        int i;
        bool is_top_nibble = true;
        for (i = 1; i < argc; i++) {
                char *ch;
                
                for (ch = argv[i]; *ch != 0; ch++) {
                        unsigned char val;
                        if (*ch >= '0' && *ch <= '9')
                                val = (*ch) - '0';
                        else if (*ch >= 'a' && *ch <= 'f')
                                val = (*ch) - 'a' + 0xa;
                        else if (*ch >= 'A' && *ch <= 'F')
                                val = (*ch) - 'A' + 0xA;
                        else if (*ch == ' ' || *ch == '+' || *ch == '\t') {
                                continue;
                        } else {
                                fprintf(stderr, "\n\nInvalid character '%c' (%d) in sequence\n", *ch, *ch);
                                return 1;
                        }

                        if (is_top_nibble) {
                                sense[sense_len] = val<<4;
                                is_top_nibble = false;
                        } else {
                                sense[sense_len] |= val;
                                is_top_nibble = true;
                                sense_len++;
                        }
                }
        }

        if (!is_top_nibble) {
                fprintf(stderr, "Missing a nibble!\n");
                return 2;
        }

        printf("Decoding sense...\n");
        sense_dump(sense, sense_len);
        return 0;
}