本文整理汇总了C++中CHK_OVERFLOW函数的典型用法代码示例。如果您正苦于以下问题:C++ CHK_OVERFLOW函数的具体用法?C++ CHK_OVERFLOW怎么用?C++ CHK_OVERFLOW使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了CHK_OVERFLOW函数的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: diag_update_msg_mask
static void diag_update_msg_mask(int start, int end , uint8_t *buf)
{
int found = 0, first, last, actual_last;
uint8_t *actual_last_ptr;
uint8_t *ptr = driver->msg_masks;
uint8_t *ptr_buffer_start = &(*(driver->msg_masks));
uint8_t *ptr_buffer_end = &(*(driver->msg_masks)) + MSG_MASK_SIZE;
mutex_lock(&driver->diagchar_mutex);
/* First SSID can be zero : So check that last is non-zero */
while (*(uint32_t *)(ptr + 4)) {
first = *(uint32_t *)ptr;
ptr += 4;
last = *(uint32_t *)ptr;
ptr += 4;
actual_last = *(uint32_t *)ptr;
actual_last_ptr = ptr;
ptr += 4;
if (start >= first && start <= actual_last) {
ptr += (start - first)*4;
if (end > actual_last) {
pr_info("diag: ssid range mismatch\n");
actual_last = end;
*(uint32_t *)(actual_last_ptr) = end;
}
if (CHK_OVERFLOW(ptr_buffer_start, ptr, ptr_buffer_end,
(((end - start)+1)*4))) {
pr_debug("diag: update ssid start %d, end %d\n",
start, end);
memcpy(ptr, buf , ((end - start)+1)*4);
} else
pr_alert("diag: Not enough space MSG_MASK\n");
found = 1;
break;
} else {
ptr += MAX_SSID_PER_RANGE*4;
}
}
/* Entry was not found - add new table */
if (!found) {
if (CHK_OVERFLOW(ptr_buffer_start, ptr, ptr_buffer_end,
8 + ((end - start) + 1)*4)) {
memcpy(ptr, &(start) , 4);
ptr += 4;
memcpy(ptr, &(end), 4);
ptr += 4;
memcpy(ptr, &(end), 4); /* create actual_last entry */
ptr += 4;
pr_debug("diag: adding NEW ssid start %d, end %d\n",
start, end);
memcpy(ptr, buf , ((end - start) + 1)*4);
} else
pr_alert("diag: Not enough buffer space for MSG_MASK\n");
}
mutex_unlock(&driver->diagchar_mutex);
diag_print_mask_table();
}
示例2: diag_update_log_mask
static void diag_update_log_mask(int equip_id, uint8_t *buf, int num_items)
{
uint8_t *temp = buf;
int i = 0;
unsigned char *ptr_data;
int offset = (sizeof(struct mask_info))*MAX_EQUIP_ID;
struct mask_info *ptr = (struct mask_info *)(driver->log_masks);
pr_debug("diag: received equip id = %d\n", equip_id);
mutex_lock(&driver->diagchar_mutex);
/* Check if we already know index of this equipment ID */
for (i = 0; i < MAX_EQUIP_ID; i++) {
if ((ptr->equip_id == equip_id) && (ptr->index != 0)) {
offset = ptr->index;
break;
}
if ((ptr->equip_id == 0) && (ptr->index == 0)) {
/* Reached a null entry */
ptr->equip_id = equip_id;
ptr->num_items = num_items;
ptr->index = driver->log_masks_length;
offset = driver->log_masks_length;
driver->log_masks_length += ((num_items+7)/8);
break;
}
ptr++;
}
ptr_data = driver->log_masks + offset;
if (CHK_OVERFLOW(driver->log_masks, ptr_data, driver->log_masks
+ LOG_MASK_SIZE, (num_items+7)/8))
memcpy(ptr_data, temp , (num_items+7)/8);
else
pr_err("diag: Not enough buffer space for LOG_MASK\n");
mutex_unlock(&driver->diagchar_mutex);
}
示例3: diag_update_log_mask
static void diag_update_log_mask(uint8_t *buf, int num_items)
{
uint8_t *ptr = driver->log_masks;
uint8_t *temp = buf;
mutex_lock(&driver->diagchar_mutex);
if (CHK_OVERFLOW(ptr, ptr, ptr + LOG_MASK_SIZE,
(num_items+7)/8))
memcpy(ptr, temp , (num_items+7)/8);
else
printk(KERN_CRIT " Not enough buffer space for LOG_MASK\n");
mutex_unlock(&driver->diagchar_mutex);
}
示例4: diag_update_event_mask
static void diag_update_event_mask(uint8_t *buf, int num_bytes)
{
uint8_t *ptr = driver->event_masks;
uint8_t *temp = buf + 2;
mutex_lock(&driver->diagchar_mutex);
if (CHK_OVERFLOW(ptr, ptr, ptr+EVENT_MASK_SIZE, num_bytes)) {
memcpy(ptr, temp, num_bytes);
driver->event_status = DIAG_CTRL_MASK_VALID;
} else {
pr_err("diag: In %s, not enough buffer space\n", __func__);
}
mutex_unlock(&driver->diagchar_mutex);
}
示例5: diag_update_event_mask
static void diag_update_event_mask(uint8_t *buf, int toggle, int num_bytes)
{
uint8_t *ptr = driver->event_masks;
uint8_t *temp = buf + 2;
mutex_lock(&driver->diagchar_mutex);
if (!toggle)
memset(ptr, 0 , EVENT_MASK_SIZE);
else
if (CHK_OVERFLOW(ptr, ptr,
ptr+EVENT_MASK_SIZE, num_bytes))
memcpy(ptr, temp , num_bytes);
else
printk(KERN_CRIT "Not enough buffer space for EVENT_MASK\n");
mutex_unlock(&driver->diagchar_mutex);
}
示例6: diag_update_msg_mask
static void diag_update_msg_mask(int start, int end , uint8_t *buf)
{
int found = 0, first, last, actual_last;
uint8_t *actual_last_ptr;
uint8_t *ptr = driver->msg_masks;
uint8_t *ptr_buffer_start = &(*(driver->msg_masks));
uint8_t *ptr_buffer_end = &(*(driver->msg_masks)) + MSG_MASK_SIZE;
uint32_t copy_len = (end - start + 1) * sizeof(int);
mutex_lock(&driver->diagchar_mutex);
while (*(uint32_t *)(ptr + 4)) {
first = *(uint32_t *)ptr;
ptr += 4;
last = *(uint32_t *)ptr;
ptr += 4;
actual_last = *(uint32_t *)ptr;
actual_last_ptr = ptr;
ptr += 4;
if (start >= first && start <= actual_last) {
ptr += (start - first)*4;
if (end > actual_last) {
pr_info("diag: ssid range mismatch\n");
actual_last = end;
*(uint32_t *)(actual_last_ptr) = end;
}
if (actual_last-first >= MAX_SSID_PER_RANGE) {
pr_err("diag: In %s, truncating ssid range, %d-%d to max allowed: %d",
__func__, first, actual_last,
MAX_SSID_PER_RANGE);
copy_len = MAX_SSID_PER_RANGE;
actual_last = first + MAX_SSID_PER_RANGE;
*(uint32_t *)actual_last_ptr = actual_last;
}
if (CHK_OVERFLOW(ptr_buffer_start, ptr, ptr_buffer_end,
(((end - start)+1)*4))) {
pr_debug("diag: update ssid start %d, end %d\n",
start, end);
memcpy(ptr, buf , copy_len);
} else
pr_alert("diag: Not enough space MSG_MASK\n");
found = 1;
break;
} else {
ptr += MAX_SSID_PER_RANGE*4;
}
}
if (!found) {
if (CHK_OVERFLOW(ptr_buffer_start, ptr, ptr_buffer_end,
8 + ((end - start) + 1)*4)) {
memcpy(ptr, &(start) , 4);
ptr += 4;
memcpy(ptr, &(end), 4);
ptr += 4;
memcpy(ptr, &(end), 4);
ptr += 4;
pr_debug("diag: adding NEW ssid start %d, end %d\n",
start, end);
memcpy(ptr, buf , ((end - start) + 1)*4);
} else
pr_alert("diag: Not enough buffer space for MSG_MASK\n");
}
driver->msg_status = DIAG_CTRL_MASK_VALID;
mutex_unlock(&driver->diagchar_mutex);
diag_print_mask_table();
}
示例7: diag_update_msg_mask
static void diag_update_msg_mask(int start, int end , uint8_t *buf)
{
int found = 0;
int first;
int last;
uint8_t *ptr = driver->msg_masks;
uint8_t *ptr_buffer_start = &(*(driver->msg_masks));
uint8_t *ptr_buffer_end = &(*(driver->msg_masks)) + MSG_MASK_SIZE;
mutex_lock(&driver->diagchar_mutex);
/* First SSID can be zero : So check that last is non-zero */
while (*(uint32_t *)(ptr + 4)) {
first = *(uint32_t *)ptr;
ptr += 4;
last = *(uint32_t *)ptr;
ptr += 4;
if (start >= first && start <= last) {
ptr += (start - first)*4;
if (end <= last)
if (CHK_OVERFLOW(ptr_buffer_start, ptr,
ptr_buffer_end,
(((end - start)+1)*4)))
memcpy(ptr, buf , ((end - start)+1)*4);
else
printk(KERN_CRIT "Not enough"
" buffer space for"
" MSG_MASK\n");
else
printk(KERN_INFO "Unable to copy"
" mask change\n");
found = 1;
break;
} else {
ptr += ((last - first) + 1)*4;
}
}
/* Entry was not found - add new table */
if (!found) {
if (CHK_OVERFLOW(ptr_buffer_start, ptr, ptr_buffer_end,
8 + ((end - start) + 1)*4)) {
memcpy(ptr, &(start) , 4);
ptr += 4;
memcpy(ptr, &(end), 4);
ptr += 4;
memcpy(ptr, buf , ((end - start) + 1)*4);
} else
printk(KERN_CRIT " Not enough buffer"
" space for MSG_MASK\n");
}
mutex_unlock(&driver->diagchar_mutex);
diag_print_mask_table();
#ifdef CONFIG_LGE_DIAG
if(ptr[(LGE_DIAG_ICD_LOGGING_SSID-start)*4] == LGE_DIAG_ICD_LOGGING_SSID_MASK)
{
if(key_touch_logging_status == 0)
{
printk(KERN_INFO "[SLATE] %s : enable hard key press & pan tap event logging\n",__func__);
key_touch_logging_status = 1;
}
}
else
{
if(key_touch_logging_status == 1)
{
printk(KERN_INFO "[SLATE] %s : disable hard key press & pan tap event logging\n",__func__);
key_touch_logging_status = 0;
}
}
#endif /*CONFIG_LGE_DIAG*/
}