/* This file is part of libcapwap. libcapwap is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. libcapwap is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with Foobar. If not, see . */ /** * @file * @brief Implementation of various format functions. */ #include #include #include "cw.h" /** * Format bytes as hex string. * @param dst Destination buffer * @param format Format to use, when writing a byte. Use the same format syntax as for printf, * e.g. the string "%02X" would format a byte as upper case hexadeciaml string. * @param delim Delimiter string. The given string is placed between bytes. * @param src Bytes to format * @param len Number of bytes to format * @return the number of characters written to dst * * This function is used by macros like #cw_format_hexl, #cw_format_hex ... \n * The size of the destination buffer must be at least x * len + strlen(delim) * (len-1) +1, * where x is the number of characters. A formatted hex byte needs (typically 2). * */ int format_hex_bytes(char *dst, const char *format, const char *delim, const uint8_t * src, int len) { char *d = dst; int i; const char *cdelim = NULL; for (i = 0; i < len; i++) { if (cdelim) d += sprintf(d, "%s", cdelim); else cdelim = delim; d += sprintf(d, format, src[i]); } return d - dst; } char *format_s_hex_bytes(char *dst, const char *format, const char *delim, const uint8_t * src, int len) { format_hex_bytes(dst, format, delim, src, len); return dst; } int format_hdr_flags(char *dst, uint8_t * th) { char *s = dst; s += sprintf(s, "%s", "("); s += sprintf(s, "%s", cw_get_hdr_flag_t(th) ? "T" : ""); s += sprintf(s, "%s", cw_get_hdr_flag_f(th) ? "F" : ""); s += sprintf(s, "%s", cw_get_hdr_flag_l(th) ? "L" : ""); s += sprintf(s, "%s", cw_get_hdr_flag_w(th) ? "W" : ""); s += sprintf(s, "%s", cw_get_hdr_flag_m(th) ? "M" : ""); s += sprintf(s, "%s", cw_get_hdr_flag_k(th) ? "K" : ""); s += sprintf(s, "%s", ")"); return s - dst; }