1 #include <opensync/opensync.h>
2 #include <opensync/opensync_internals.h>
3 #include <opensync/opensync_support_internals.h>
9 //#include <sys/wait.h>
13 static void usage (char *name
, int ecode
)
15 fprintf (stderr
, "Usage: %s\n", name
);
16 fprintf (stderr
, "%s <Input> <Output>\n", name
);
17 fprintf (stderr
, "[--hex]\tConvert from a plain hex format\n");
21 osync_bool
convert_hex(const char *input
, unsigned int inpsize
, char **output
, unsigned int *outsize
)
24 GString
*string
= g_string_new("");
25 unsigned int character
= 0;
26 for (i
= 0; i
< inpsize
- 1; i
= i
+ 2) {
28 printf("Current char is %c%c\n", input
[i
], input
[i
+ 1]);
31 tmp
[1] = input
[i
+ 1];
34 sscanf(tmp
, " %x", &character
);
35 g_string_append_c(string
, character
);
38 *outsize
= string
->len
;
39 *output
= g_string_free(string
, FALSE
);
43 osync_bool
convert_bin(const char *input
, unsigned int inpsize
, char **output
, unsigned int *outsize
)
46 GString
*string
= g_string_new("");
48 for (i
= 0; i
< inpsize
; i
++) {
49 unsigned int character
= 0;
50 printf("\nCurrent char is %i (%c)\n", input
[i
], input
[i
]);
51 if (input
[i
] == '\r' || input
[i
] == '\n') {
52 printf("Invalid input\n");
56 //char string1[2] = "";
57 //char string2[3] = "";
59 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
60 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
61 if (g_pattern_match_simple(" ?? *", input
+ i
) && sscanf(input
+ i
, " %x %*s", &character
) == 1) {
62 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
66 printf("escaped chars are %.4s %i\n", input
+ i
, sscanf(input
+ i
, " %x %*s", &character
));
67 printf("returned is %i\n", sscanf(input
+ i
, " %x %*s", &character
));
68 if (sscanf(input
+ i
, " %x %*s", &character
) != 1)
70 printf("Found a escaped char %i\n", character
);
71 g_string_append_c(string
, character
);
75 printf("Appending normal char %i\n", input
[i
]);
76 g_string_append_c(string
, input
[i
]);
81 *outsize
= string
->len
;
82 *output
= g_string_free(string
, FALSE
);
86 int main (int argc
, char *argv
[])
88 OSyncError
*error
= NULL
;
90 osync_bool hex
= FALSE
;
95 unsigned int size
= 0;
97 char *outbuffer
= NULL
;
98 unsigned int outsize
= 0;
103 for (i
= 1; i
< argc
; i
++) {
105 if (!strcmp (arg
, "--hex")) {
107 } else if (!strcmp (arg
, "--help")) {
115 output
= argv
[i
+ 1];
117 printf("input %s output %s\n", input
, output
);
119 if (!osync_file_read(input
, &buffer
, &size
, &error
)) {
120 fprintf(stderr
, "%s\n", osync_error_print(&error
));
121 osync_error_unref(&error
);
125 array
= g_strsplit(buffer
, "\n", 0);
127 buffer
= g_strjoinv(NULL
, array
);
128 size
= strlen(buffer
) + 1;
132 if (!convert_hex(buffer
, size
, &outbuffer
, &outsize
)) {
133 fprintf(stderr
, "Unable to convert");
137 if (!convert_bin(buffer
, size
, &outbuffer
, &outsize
)) {
138 fprintf(stderr
, "Unable to convert");
143 if (!osync_file_write(output
, outbuffer
, outsize
, 0644, &error
)) {
144 fprintf(stderr
, "Unable to write file %s: %s", output
, osync_error_print(&error
));
145 osync_error_unref(&error
);