return str;
}
-/* / identify radix, and skip radix-prefix (0, 0x or 0X) */
+/** identify radix, and skip radix-prefix (0, 0x or 0X) */
static void str_radix_guess(const char **_str, unsigned *_str_len,
unsigned *_radix)
{
return i;
}
+
+void bit_copy_queue_init(struct bit_copy_queue *q)
+{
+ INIT_LIST_HEAD(&q->list);
+}
+
+int bit_copy_queued(struct bit_copy_queue *q, uint8_t *dst, unsigned dst_offset, const uint8_t *src,
+ unsigned src_offset, unsigned bit_count)
+{
+ struct bit_copy_queue_entry *qe = malloc(sizeof(*qe));
+ if (!qe)
+ return ERROR_FAIL;
+
+ qe->dst = dst;
+ qe->dst_offset = dst_offset;
+ qe->src = src;
+ qe->src_offset = src_offset;
+ qe->bit_count = bit_count;
+ list_add_tail(&qe->list, &q->list);
+
+ return ERROR_OK;
+}
+
+void bit_copy_execute(struct bit_copy_queue *q)
+{
+ struct bit_copy_queue_entry *qe;
+ struct bit_copy_queue_entry *tmp;
+ list_for_each_entry_safe(qe, tmp, &q->list, list) {
+ bit_copy(qe->dst, qe->dst_offset, qe->src, qe->src_offset, qe->bit_count);
+ list_del(&qe->list);
+ free(qe);
+ }
+}
+
+void bit_copy_discard(struct bit_copy_queue *q)
+{
+ struct bit_copy_queue_entry *qe;
+ struct bit_copy_queue_entry *tmp;
+ list_for_each_entry_safe(qe, tmp, &q->list, list) {
+ list_del(&qe->list);
+ free(qe);
+ }
+}
+
+int unhexify(char *bin, const char *hex, int count)
+{
+ int i, tmp;
+
+ for (i = 0; i < count; i++) {
+ if (sscanf(hex + (2 * i), "%02x", &tmp) != 1)
+ return i;
+ bin[i] = tmp;
+ }
+
+ return i;
+}
+
+int hexify(char *hex, const char *bin, int count, int out_maxlen)
+{
+ int i, cmd_len = 0;
+
+ /* May use a length, or a null-terminated string as input. */
+ if (count == 0)
+ count = strlen(bin);
+
+ for (i = 0; i < count; i++)
+ cmd_len += snprintf(hex + cmd_len, out_maxlen - cmd_len, "%02x", bin[i] & 0xff);
+
+ return cmd_len;
+}