comparison uicc/writecmd.c @ 15:b70d35f5476f

fc-uicc-tool ported over
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Mar 2021 07:41:09 +0000
parents
children 0c19ec7af526
comparison
equal deleted inserted replaced
14:b7ee2e85686b 15:b70d35f5476f
1 #include <sys/types.h>
2 #include <stdio.h>
3 #include <stdlib.h>
4
5 extern unsigned last_sel_file_record_len;
6
7 cmd_update_bin(argc, argv)
8 char **argv;
9 {
10 unsigned offset, len;
11 u_char data[255];
12 int rc;
13
14 offset = strtoul(argv[1], 0, 0);
15 if (offset > 0x7FFF) {
16 fprintf(stderr, "error: offset argument is out of range\n");
17 return(-1);
18 }
19 rc = read_hex_data_file(argv[2], data, 255);
20 if (rc < 0)
21 return(rc);
22 len = rc;
23 return update_bin_op(offset, data, len);
24 }
25
26 cmd_update_bin_imm(argc, argv)
27 char **argv;
28 {
29 unsigned offset, len;
30 u_char data[255];
31 int rc;
32
33 offset = strtoul(argv[1], 0, 0);
34 if (offset > 0x7FFF) {
35 fprintf(stderr, "error: offset argument is out of range\n");
36 return(-1);
37 }
38 rc = decode_hex_data_from_string(argv[2], data, 1, 255);
39 if (rc < 0)
40 return(rc);
41 len = rc;
42 return update_bin_op(offset, data, len);
43 }
44
45 cmd_update_rec(argc, argv)
46 char **argv;
47 {
48 unsigned recno;
49 u_char data[255];
50 int rc;
51
52 if (!last_sel_file_record_len) {
53 fprintf(stderr, "error: no record-based file selected\n");
54 return(-1);
55 }
56 recno = strtoul(argv[1], 0, 0);
57 if (recno < 1 || recno > 255) {
58 fprintf(stderr,
59 "error: record number argument is out of range\n");
60 return(-1);
61 }
62 rc = read_hex_data_file(argv[2], data, 255);
63 if (rc < 0)
64 return(rc);
65 if (rc != last_sel_file_record_len) {
66 fprintf(stderr, "error: hex data length != EF record length\n");
67 return(-1);
68 }
69 return update_rec_op(recno, 0x04, data, last_sel_file_record_len);
70 }