1 #include <opensync/opensync.h>
7 //#include <sys/wait.h>
11 static void usage (char *name
, int ecode
)
13 fprintf (stderr
, "Usage: %s\n", name
);
14 fprintf (stderr
, "%s <Input> <Output>\n", name
);
15 fprintf (stderr
, "[--hex]\tConvert from a plain hex format\n");
19 osync_bool
convert_hex(const char *input
, unsigned int inpsize
, char **output
, unsigned int *outsize
)
22 GString
*string
= g_string_new("");
23 unsigned int character
= 0;
24 for (i
= 0; i
< inpsize
- 1; i
= i
+ 2) {
26 printf("Current char is %c%c\n", input
[i
], input
[i
+ 1]);
29 tmp
[1] = input
[i
+ 1];
32 sscanf(tmp
, " %x", &character
);
33 g_string_append_c(string
, character
);
36 *outsize
= string
->len
;
37 *output
= g_string_free(string
, FALSE
);
41 osync_bool
convert_bin(const char *input
, unsigned int inpsize
, char **output
, unsigned int *outsize
)
44 GString
*string
= g_string_new("");
46 for (i
= 0; i
< inpsize
; i
++) {
47 unsigned int character
= 0;
48 printf("\nCurrent char is %i (%c)\n", input
[i
], input
[i
]);
49 if (input
[i
] == '\r' || input
[i
] == '\n') {
50 printf("Invalid input\n");
54 //char string1[2] = "";
55 //char string2[3] = "";
57 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
58 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
59 if (g_pattern_match_simple(" ?? *", input
+ i
) && sscanf(input
+ i
, " %x %*s", &character
) == 1) {
60 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
64 printf("escaped chars are %.4s %i\n", input
+ i
, sscanf(input
+ i
, " %x %*s", &character
));
65 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
66 if (sscanf(input
+ i
, " %x %*s", &character
) != 1)
68 printf("Found a escaped char %i\n", character
);
69 g_string_append_c(string
, character
);
73 printf("Appending normal char %i\n", input
[i
]);
74 g_string_append_c(string
, input
[i
]);
79 *outsize
= string
->len
;
80 *output
= g_string_free(string
, FALSE
);
84 int main (int argc
, char *argv
[])
86 OSyncError
*error
= NULL
;
88 osync_bool hex
= FALSE
;
93 unsigned int size
= 0;
95 char *outbuffer
= NULL
;
96 unsigned int outsize
= 0;
101 for (i
= 1; i
< argc
; i
++) {
103 if (!strcmp (arg
, "--hex")) {
105 } else if (!strcmp (arg
, "--help")) {
113 output
= argv
[i
+ 1];
115 printf("input %s output %s\n", input
, output
);
117 if (!osync_file_read(input
, &buffer
, &size
, &error
)) {
118 fprintf(stderr
, "%s\n", osync_error_print(&error
));
119 osync_error_unref(&error
);
123 array
= g_strsplit(buffer
, "\n", 0);
125 buffer
= g_strjoinv(NULL
, array
);
126 size
= strlen(buffer
) + 1;
130 if (!convert_hex(buffer
, size
, &outbuffer
, &outsize
)) {
131 fprintf(stderr
, "Unable to convert");
135 if (!convert_bin(buffer
, size
, &outbuffer
, &outsize
)) {
136 fprintf(stderr
, "Unable to convert");
141 if (!osync_file_write(output
, outbuffer
, outsize
, 0644, &error
)) {
142 fprintf(stderr
, "Unable to write file %s: %s", output
, osync_error_print(&error
));
143 osync_error_unref(&error
);