[F] Fixed compiler warnings

This commit is contained in:
seleznevae 2018-04-17 20:14:50 +03:00
parent 1d0fa0932a
commit 44e734ead9
11 changed files with 62 additions and 46 deletions

View File

@ -524,7 +524,7 @@ FT_EXTERN int ft_set_default_cell_option(uint32_t option, int value);
* - 0: Success; cell option was changed. * - 0: Success; cell option was changed.
* - (-1): !!!!!!!! todo * - (-1): !!!!!!!! todo
*/ */
FT_EXTERN int ft_set_cell_option(FTABLE *table, unsigned row, unsigned col, uint32_t option, int value); FT_EXTERN int ft_set_cell_option(FTABLE *table, size_t row, size_t col, uint32_t option, int value);
/** /**
* Table options identifiers * Table options identifiers

View File

@ -36,7 +36,7 @@ void destroy_cell(fort_cell_t *cell)
F_FREE(cell); F_FREE(cell);
} }
unsigned int hint_width_cell(const fort_cell_t *cell, const context_t *context) size_t hint_width_cell(const fort_cell_t *cell, const context_t *context)
{ {
/* todo: /* todo:
* At the moment min width includes paddings. Maybe it is better that min width weren't include * At the moment min width includes paddings. Maybe it is better that min width weren't include
@ -45,24 +45,24 @@ unsigned int hint_width_cell(const fort_cell_t *cell, const context_t *context)
assert(cell); assert(cell);
assert(context); assert(context);
unsigned int cell_padding_left = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_LEFT_PADDING); size_t cell_padding_left = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_LEFT_PADDING);
unsigned int cell_padding_right = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_RIGHT_PADDING); size_t cell_padding_right = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_RIGHT_PADDING);
unsigned int result = cell_padding_left + cell_padding_right; size_t result = cell_padding_left + cell_padding_right;
if (cell->str_buffer && cell->str_buffer->str.data) { if (cell->str_buffer && cell->str_buffer->str.data) {
result += buffer_text_width(cell->str_buffer); result += buffer_text_width(cell->str_buffer);
} }
result = MAX(result, (unsigned)get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_MIN_WIDTH)); result = MAX(result, (size_t)get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_MIN_WIDTH));
return result; return result;
} }
unsigned int hint_height_cell(const fort_cell_t *cell, const context_t *context) size_t hint_height_cell(const fort_cell_t *cell, const context_t *context)
{ {
assert(cell); assert(cell);
assert(context); assert(context);
unsigned int cell_padding_top = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TOP_PADDING); size_t cell_padding_top = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TOP_PADDING);
unsigned int cell_padding_bottom = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_BOTTOM_PADDING); size_t cell_padding_bottom = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_BOTTOM_PADDING);
unsigned int cell_empty_string_height = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_EMPTY_STR_HEIGHT); size_t cell_empty_string_height = get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_EMPTY_STR_HEIGHT);
int result = cell_padding_top + cell_padding_bottom; size_t result = cell_padding_top + cell_padding_bottom;
if (cell->str_buffer && cell->str_buffer->str.data) { if (cell->str_buffer && cell->str_buffer->str.data) {
size_t text_height = buffer_text_height(cell->str_buffer); size_t text_height = buffer_text_height(cell->str_buffer);
result += text_height == 0 ? cell_empty_string_height : text_height; result += text_height == 0 ? cell_empty_string_height : text_height;

View File

@ -13,8 +13,8 @@ fort_cell_t * create_cell(void);
void destroy_cell(fort_cell_t *cell); void destroy_cell(fort_cell_t *cell);
unsigned int hint_width_cell(const fort_cell_t *cell, const context_t *context); size_t hint_width_cell(const fort_cell_t *cell, const context_t *context);
unsigned int hint_height_cell(const fort_cell_t *cell, const context_t *context); size_t hint_height_cell(const fort_cell_t *cell, const context_t *context);
/* /*

View File

@ -824,7 +824,7 @@ int ft_set_border_style(FTABLE *table, struct ft_border_style *style)
int ft_set_cell_option(FTABLE *table, unsigned row, unsigned col, uint32_t option, int value) int ft_set_cell_option(FTABLE *table, size_t row, size_t col, uint32_t option, int value)
{ {
assert(table); assert(table);

View File

@ -148,6 +148,10 @@ int snprint_n_chars(char *buf, size_t length, size_t n, char ch)
if (n == 0) if (n == 0)
return 0; return 0;
/* To ensure valid return value it is safely not print such big strings */
if (n > INT_MAX)
return -1;
int status = snprintf(buf, length, "%0*d", (int)n, 0); int status = snprintf(buf, length, "%0*d", (int)n, 0);
if (status < 0) if (status < 0)
return status; return status;
@ -157,7 +161,7 @@ int snprint_n_chars(char *buf, size_t length, size_t n, char ch)
*buf = ch; *buf = ch;
buf++; buf++;
} }
return n; return (int)n;
} }
@ -169,6 +173,10 @@ int wsnprint_n_chars(wchar_t *buf, size_t length, size_t n, wchar_t ch)
if (n == 0) if (n == 0)
return 0; return 0;
/* To ensure valid return value it is safely not print such big strings */
if (n > INT_MAX)
return -1;
int status = swprintf(buf, length, L"%0*d", (int)n, 0); int status = swprintf(buf, length, L"%0*d", (int)n, 0);
if (status < 0) if (status < 0)
return status; return status;
@ -178,5 +186,5 @@ int wsnprint_n_chars(wchar_t *buf, size_t length, size_t n, wchar_t ch)
*buf = ch; *buf = ch;
buf++; buf++;
} }
return n; return (int)n;
} }

View File

@ -1,6 +1,10 @@
#ifndef FORT_IMPL_H #ifndef FORT_IMPL_H
#define FORT_IMPL_H #define FORT_IMPL_H
#if defined(_MSC_VER)
#define _CRT_SECURE_NO_WARNINGS /* To disable warnings for unsafe functions */
#endif
#include <stddef.h> #include <stddef.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
@ -8,9 +12,7 @@
#include <stdio.h> #include <stdio.h>
#include "fort.h" #include "fort.h"
#if defined(FT_MICROSOFT_COMPILER)
#define _CRT_SECURE_NO_WARNINGS /* To disable warnings for unsafe functions */
#endif
#define FORT_COL_SEPARATOR '|' #define FORT_COL_SEPARATOR '|'

View File

@ -86,7 +86,7 @@ void destroy_cell_opt_container(fort_cell_opt_container_t *cont)
destroy_vector(cont); destroy_vector(cont);
} }
const fort_cell_options_t *cget_cell_opt(const fort_cell_opt_container_t *cont, unsigned row, unsigned col) const fort_cell_options_t *cget_cell_opt(const fort_cell_opt_container_t *cont, size_t row, size_t col)
{ {
assert(cont); assert(cont);
size_t sz = vector_size(cont); size_t sz = vector_size(cont);
@ -99,7 +99,7 @@ const fort_cell_options_t *cget_cell_opt(const fort_cell_opt_container_t *cont,
return NULL; return NULL;
} }
fort_cell_options_t *get_cell_opt_and_create_if_not_exists(fort_cell_opt_container_t *cont, unsigned row, unsigned col) fort_cell_options_t *get_cell_opt_and_create_if_not_exists(fort_cell_opt_container_t *cont, size_t row, size_t col)
{ {
assert(cont); assert(cont);
size_t sz = vector_size(cont); size_t sz = vector_size(cont);
@ -186,7 +186,7 @@ fort_fail:
} }
fort_status_t set_cell_option(fort_cell_opt_container_t *cont, unsigned row, unsigned col, uint32_t option, int value) fort_status_t set_cell_option(fort_cell_opt_container_t *cont, size_t row, size_t col, uint32_t option, int value)
{ {
fort_cell_options_t *opt = get_cell_opt_and_create_if_not_exists(cont, row, col); fort_cell_options_t *opt = get_cell_opt_and_create_if_not_exists(cont, row, col);
if (opt == NULL) if (opt == NULL)

View File

@ -26,8 +26,8 @@ typedef struct vector vector_t;
struct fort_cell_options struct fort_cell_options
{ {
unsigned cell_row; size_t cell_row;
unsigned cell_col; size_t cell_col;
uint32_t options; uint32_t options;
unsigned int col_min_width; unsigned int col_min_width;
enum ft_text_alignment align; enum ft_text_alignment align;
@ -46,9 +46,9 @@ typedef struct fort_cell_options fort_cell_options_t;
typedef vector_t fort_cell_opt_container_t; typedef vector_t fort_cell_opt_container_t;
fort_cell_opt_container_t *create_cell_opt_container(void); fort_cell_opt_container_t *create_cell_opt_container(void);
void destroy_cell_opt_container(fort_cell_opt_container_t *cont); void destroy_cell_opt_container(fort_cell_opt_container_t *cont);
const fort_cell_options_t* cget_cell_opt(const fort_cell_opt_container_t *cont, unsigned row, unsigned col); const fort_cell_options_t* cget_cell_opt(const fort_cell_opt_container_t *cont, size_t row, size_t col);
fort_cell_options_t* get_cell_opt_and_create_if_not_exists(fort_cell_opt_container_t *cont, unsigned row, unsigned col); fort_cell_options_t* get_cell_opt_and_create_if_not_exists(fort_cell_opt_container_t *cont, size_t row, size_t col);
fort_status_t set_cell_option(fort_cell_opt_container_t *cont, unsigned row, unsigned col, uint32_t option, int value); fort_status_t set_cell_option(fort_cell_opt_container_t *cont, size_t row, size_t col, uint32_t option, int value);
fort_status_t unset_cell_option(fort_cell_opt_container_t *cont, unsigned row, unsigned col, uint32_t option); fort_status_t unset_cell_option(fort_cell_opt_container_t *cont, unsigned row, unsigned col, uint32_t option);
int get_cell_opt_value_hierarcial(const fort_table_options_t *options, size_t row, size_t column, uint32_t option); int get_cell_opt_value_hierarcial(const fort_table_options_t *options, size_t row, size_t column, uint32_t option);

View File

@ -52,7 +52,7 @@ void destroy_row(fort_row_t *row)
unsigned int columns_in_row(const fort_row_t *row) size_t columns_in_row(const fort_row_t *row)
{ {
if (row == NULL || row->cells == NULL) if (row == NULL || row->cells == NULL)
return 0; return 0;
@ -414,7 +414,7 @@ fort_row_t *create_row_from_fmt_string(const char *fmt, va_list *va_args)
while (1) { while (1) {
va_list va; va_list va;
va_copy(va, *va_args); va_copy(va, *va_args);
int virtual_sz = vsnprintf(buffer->str.cstr, string_buffer_capacity(buffer)/*buffer->str_sz*/, fmt, va); int virtual_sz = vsnprintf(buffer->str.cstr, string_buffer_capacity(buffer), fmt, va);
va_end(va); va_end(va);
/* If error encountered */ /* If error encountered */
if (virtual_sz < 0) if (virtual_sz < 0)
@ -463,7 +463,7 @@ int snprintf_row(const fort_row_t *row, char *buffer, size_t buf_sz, size_t *col
if (row == NULL) if (row == NULL)
return -1; return -1;
unsigned int cols_in_row = columns_in_row(row); size_t cols_in_row = columns_in_row(row);
if (cols_in_row > col_width_arr_sz) if (cols_in_row > col_width_arr_sz)
return -1; return -1;
@ -533,7 +533,7 @@ int wsnprintf_row(const fort_row_t *row, wchar_t *buffer, size_t buf_sz, size_t
if (row == NULL) if (row == NULL)
return -1; return -1;
unsigned int cols_in_row = columns_in_row(row); size_t cols_in_row = columns_in_row(row);
if (cols_in_row > col_width_arr_sz) if (cols_in_row > col_width_arr_sz)
return -1; return -1;

View File

@ -24,7 +24,7 @@ fort_row_t * create_row_from_string(const char *str);
fort_row_t* create_row_from_fmt_string(const char* fmt, va_list *va_args); fort_row_t* create_row_from_fmt_string(const char* fmt, va_list *va_args);
unsigned int columns_in_row(const fort_row_t *row); size_t columns_in_row(const fort_row_t *row);
fort_cell_t *get_cell_implementation(fort_row_t *row, size_t col, enum PolicyOnNull policy); fort_cell_t *get_cell_implementation(fort_row_t *row, size_t col, enum PolicyOnNull policy);
fort_cell_t *get_cell(fort_row_t *row, size_t col); fort_cell_t *get_cell(fort_row_t *row, size_t col);

View File

@ -3,18 +3,21 @@
#include "assert.h" #include "assert.h"
#include "wchar.h" #include "wchar.h"
#include "wcwidth.h" #include "wcwidth.h"
#include <stddef.h>
/***************************************************************************** /*****************************************************************************
* STRING BUFFER * STRING BUFFER
* ***************************************************************************/ * ***************************************************************************/
static int str_iter_width(const char *beg, const char *end) static ptrdiff_t str_iter_width(const char *beg, const char *end)
{ {
return end - beg; assert(end >= beg);
return (end - beg);
} }
static int wcs_iter_width(const wchar_t *beg, const wchar_t *end) static ptrdiff_t wcs_iter_width(const wchar_t *beg, const wchar_t *end)
{ {
assert(end >= beg);
return mk_wcswidth(beg, (end - beg)); return mk_wcswidth(beg, (end - beg));
} }
@ -293,8 +296,8 @@ int buffer_printf(string_buffer_t *buffer, size_t buffer_row, char *buf, size_t
if ((buf_len - 1) < content_width) if ((buf_len - 1) < content_width)
return -1; return -1;
int left = 0; size_t left = 0;
int right = 0; size_t right = 0;
switch (get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TEXT_ALIGN)) { switch (get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TEXT_ALIGN)) {
case FT_ALIGNED_LEFT: case FT_ALIGNED_LEFT:
@ -313,9 +316,6 @@ int buffer_printf(string_buffer_t *buffer, size_t buffer_row, char *buf, size_t
assert(0); assert(0);
break; break;
} }
if (left < 0 || right < 0)
return -1;
int written = 0; int written = 0;
int tmp = 0; int tmp = 0;
@ -331,9 +331,13 @@ int buffer_printf(string_buffer_t *buffer, size_t buffer_row, char *buf, size_t
old_value = *end; old_value = *end;
*(CHAR_TYPE *)end = NULL_CHAR; *(CHAR_TYPE *)end = NULL_CHAR;
ptrdiff_t str_it_width = STR_ITER_WIDTH(beg, end);
if (str_it_width < 0 || content_width < (size_t)str_it_width)
return - 1;
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINTF(buf + written, buf_len - written, SNPRINTF_FMT_STR, (int)(end - beg), beg)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINTF(buf + written, buf_len - written, SNPRINTF_FMT_STR, (int)(end - beg), beg));
*(CHAR_TYPE *)end = old_value; *(CHAR_TYPE *)end = old_value;
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, (int)(content_width - STR_ITER_WIDTH(beg, end)), SPACE_CHAR)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, (content_width - (size_t)str_it_width), SPACE_CHAR));
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, right, SPACE_CHAR)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, right, SPACE_CHAR));
return written; return written;
@ -375,8 +379,8 @@ int buffer_wprintf(string_buffer_t *buffer, size_t buffer_row, wchar_t *buf, siz
if ((buf_len - 1) < content_width) if ((buf_len - 1) < content_width)
return -1; return -1;
int left = 0; size_t left = 0;
int right = 0; size_t right = 0;
switch (get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TEXT_ALIGN)) { switch (get_cell_opt_value_hierarcial(context->table_options, context->row, context->column, FT_COPT_TEXT_ALIGN)) {
case FT_ALIGNED_LEFT: case FT_ALIGNED_LEFT:
@ -395,8 +399,6 @@ int buffer_wprintf(string_buffer_t *buffer, size_t buffer_row, wchar_t *buf, siz
assert(0); assert(0);
break; break;
} }
if (left < 0 || right < 0)
return -1;
int written = 0; int written = 0;
int tmp = 0; int tmp = 0;
@ -412,9 +414,13 @@ int buffer_wprintf(string_buffer_t *buffer, size_t buffer_row, wchar_t *buf, siz
old_value = *end; old_value = *end;
*(CHAR_TYPE *)end = NULL_CHAR; *(CHAR_TYPE *)end = NULL_CHAR;
ptrdiff_t str_it_width = STR_ITER_WIDTH(beg, end);
if (str_it_width < 0 || content_width < (size_t)str_it_width)
return - 1;
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINTF(buf + written, buf_len - written, SNPRINTF_FMT_STR, (int)(end - beg), beg)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINTF(buf + written, buf_len - written, SNPRINTF_FMT_STR, (int)(end - beg), beg));
*(CHAR_TYPE *)end = old_value; *(CHAR_TYPE *)end = old_value;
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, (int)(content_width - STR_ITER_WIDTH(beg, end)), SPACE_CHAR)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, (content_width - (size_t)str_it_width), SPACE_CHAR));
CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, right, SPACE_CHAR)); CHCK_RSLT_ADD_TO_WRITTEN(SNPRINT_N_CHARS(buf + written, buf_len - written, right, SPACE_CHAR));
return written; return written;