libexplain
1.4.D001
|
00001 /* 00002 * libexplain - Explain errno values returned by libc functions 00003 * Copyright (C) 2009, 2011, 2013 Peter Miller 00004 * 00005 * This program is free software; you can redistribute it and/or modify 00006 * it under the terms of the GNU Lesser General Public License as 00007 * published by the Free Software Foundation; either version 3 of the 00008 * License, or (at your option) any later version. 00009 * 00010 * This program is distributed in the hope that it will be useful, 00011 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00013 * Lesser General Public License for more details. 00014 * 00015 * You should have received a copy of the GNU Lesser General Public License 00016 * along with this program. If not, see <http://www.gnu.org/licenses/>. 00017 */ 00018 00019 #include <libexplain/ac/linux/kd.h> 00020 00021 #include <libexplain/buffer/consolefontdesc.h> 00022 #include <libexplain/buffer/hexdump.h> 00023 #include <libexplain/buffer/pointer.h> 00024 #include <libexplain/option.h> 00025 #include <libexplain/is_efault.h> 00026 00027 00028 #ifdef HAVE_LINUX_KD_H 00029 00030 void 00031 explain_buffer_consolefontdesc(explain_string_buffer_t *sb, 00032 const struct consolefontdesc *value, int extra) 00033 { 00034 if (explain_is_efault_pointer(value, sizeof(*value))) 00035 { 00036 explain_buffer_pointer(sb, value); 00037 return; 00038 } 00039 explain_string_buffer_printf 00040 ( 00041 sb, 00042 "{ charcount = %d, charheight = %d, chardata = ", 00043 value->charcount, 00044 value->charheight 00045 ); 00046 if 00047 ( 00048 extra 00049 && 00050 (value->charcount == 256 || value->charcount == 512) 00051 && 00052 value->charheight >= 1 00053 && 00054 value->charheight <= 32 00055 && 00056 explain_option_debug() 00057 ) 00058 { 00059 size_t size; 00060 00061 size = value->charcount * value->charheight; 00062 if (!explain_is_efault_pointer(value->chardata, size)) 00063 { 00064 explain_string_buffer_putc(sb, '{'); 00065 explain_buffer_hexdump(sb, value->chardata, size); 00066 explain_string_buffer_puts(sb, " } }"); 00067 return; 00068 } 00069 } 00070 explain_buffer_pointer(sb, value->chardata); 00071 explain_string_buffer_puts(sb, " }"); 00072 } 00073 00074 #endif /* HAVE_LINUX_KD_H */ 00075 00076 00077 /* vim: set ts=8 sw=4 et : */