Branch data Line data Source code
1 : : /* 2 : : * common.c: Utility functions for libcacard 3 : : * 4 : : * Copyright (C) 2016 - 2018 Red Hat, Inc. 5 : : * 6 : : * Authors: Robert Relyea <rrelyea@redhat.com> 7 : : * Jakub Jelen <jjelen@redhat.com> 8 : : * 9 : : * This library is free software; you can redistribute it and/or 10 : : * modify it under the terms of the GNU Lesser General Public 11 : : * License as published by the Free Software Foundation; either 12 : : * version 2.1 of the License, or (at your option) any later version. 13 : : * 14 : : * This library is distributed in the hope that it will be useful, 15 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 : : * Lesser General Public License for more details. 18 : : * 19 : : * You should have received a copy of the GNU Lesser General Public 20 : : * License along with this library; if not, write to the Free Software 21 : : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 22 : : */ 23 : : 24 : : #include "config.h" 25 : : 26 : : #include <stdio.h> 27 : : #include <string.h> 28 : : 29 : : #include "vcard.h" 30 : : #include "common.h" 31 : : 32 : : unsigned char * 33 : 88 : ushort2lebytes(unsigned char *buf, unsigned short x) 34 : : { 35 [ + - ]: 88 : if (buf != NULL) { 36 : 88 : buf[0] = (unsigned char) (x & 0xff); 37 : 88 : buf[1] = (unsigned char) ((x >> 8) & 0xff); 38 : : } 39 : 88 : return buf; 40 : : } 41 : : 42 : : unsigned short 43 : 2 : lebytes2ushort(const unsigned char *buf) 44 : : { 45 [ + - ]: 2 : if (buf == NULL) 46 : : return 0U; 47 : 2 : return (unsigned short)buf[1] << 8 | (unsigned short)buf[0]; 48 : : } 49 : : 50 : : #define MAX_STATIC_BYTES 1024 51 : : static char hexdump_buffer[5*MAX_STATIC_BYTES + 1]; 52 : : /* 53 : : * Creates printable representation in hexadecimal format of the data 54 : : * provided in the buf buffer. A static buffer will be used, which 55 : : * can hold up to 1024 bytes (longer will get truncated). 56 : : * 57 : : * The dumping loop will print 5 visible characters at a time, but since it's 58 : : * using sprintf, we also need to account for the '\0' it appends to the end of 59 : : * the string on the last iteration, or we'll overflow the buffer we are 60 : : * printing to. 61 : : */ 62 : : char * 63 : 151 : hex_dump(const unsigned char *buf, size_t buflen) 64 : : { 65 : : char *p, *start; 66 : : size_t i; 67 : : 68 [ + - ]: 151 : if (buflen <= 0) 69 : : return NULL; 70 : : 71 : : start = hexdump_buffer; 72 : 151 : buflen = MIN(buflen, MAX_STATIC_BYTES); 73 : : 74 : : p = start; 75 [ + + ]: 15890 : for (i = 0; i < buflen; i++) { 76 : 15739 : sprintf(p, "0x%02X ", buf[i]); 77 : 15739 : p += 5; 78 : : } 79 : : /* terminate */ 80 : 151 : *--p = '\x00'; 81 : 151 : return start; 82 : : } 83 : : 84 : : #if !GLIB_CHECK_VERSION(2,68,0) 85 : : void* g_memdup2(const void *ptr, size_t size) 86 : : { 87 : : void *dst = NULL; 88 : : 89 : : if (ptr && size != 0) { 90 : : dst = g_malloc(size); 91 : : memcpy(dst, ptr, size); 92 : : } 93 : : return dst; 94 : : } 95 : : #endif 96 : : 97 : : /* vim: set ts=4 sw=4 tw=0 noet expandtab: */