本文整理汇总了C++中cgc_memcpy函数的典型用法代码示例。如果您正苦于以下问题:C++ cgc_memcpy函数的具体用法?C++ cgc_memcpy怎么用?C++ cgc_memcpy使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cgc_memcpy函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: WriteOut
void WriteOut(t3DCPixel **px_list, uint8_t *data, uint16_t data_len) {
// load into our pixel data
if (px_list == NULL) {
return;
}
uint16_t offset = 0;
uint16_t i = 0;
t3DCPixel *tmp;
while (offset < data_len) {
tmp = px_list[i];
offset += 6;
cgc_memcpy(&tmp->r, data+offset, 1);
offset++;
cgc_memcpy(&tmp->g, data+offset, 1);
offset++;
cgc_memcpy(&tmp->b, data+offset, 1);
offset++;
tmp->a = 0xff;
offset++;
i++;
}
}
示例2: cgc_rs_decode
int cgc_rs_decode(uint8_t *encoded, int n_parity)
{
poly_t tmp, synd, sigma, pos;
cgc_memcpy(tmp.terms, encoded, 255);
tmp.degree = 255;
rs_calc_synd(&synd, &tmp, n_parity);
// synd.degree must equal n_parity, e.g. don't eliminate zero terms
rs_calc_sigma(&sigma, &synd);
rs_calc_pos(&pos, &sigma);
rs_calc_omega(&tmp, &synd, &sigma);
rs_calc_sigma_deriv(&sigma);
for (int i = 0; i < pos.degree; i++)
{
uint8_t x_inv = gf_inverse(gf_exp[(255 - 1 - pos.terms[i]) % 255]);
uint8_t mag = gf_div(gf_poly_eval(&tmp, x_inv), gf_mul(x_inv, gf_poly_eval(&sigma, x_inv)));
encoded[255 - 1 - pos.terms[i]] ^= mag;
}
// test result for errors
cgc_memcpy(tmp.terms, encoded, 255);
tmp.degree = 255;
rs_calc_synd(&synd, &tmp, n_parity);
gf_poly_reduce(&synd);
// if no errors, then we succesfully decoded
return synd.degree == 0;
}
示例3: cgc_gen_chem_name
char * cgc_gen_chem_name(mixed_compound_t *mc, compounds_sample_t *rcs){
// todo +1 in patched version
unsigned int block_sz = 8;
for(int i =0; i < rcs->sample_size; ++i){
if(block_sz*i == MAX_NEW_CMPND_SZ)
break;
chem_formula_t *cf = cgc_get_compound_by_idx(cgc_get_chem_ref_at_idx(rcs, i));
if(cf == NULL)
return NULL;
cgc_size_t cpsz = cgc_strlen(cf->compound_name);
if(cpsz > block_sz)
cpsz = block_sz;
cgc_memcpy(&(mc->compound_name[block_sz*i]), cf->compound_name, cpsz);
}
char *outname = cgc_malloc(MAX_NEW_CMPND_SZ);
cgc_memcpy(outname, mc->compound_name, MAX_NEW_CMPND_SZ);
return outname;
}
示例4: AddPageVar
int AddPageVar(PageVar *varlist, char *cmd) {
char *name = strchr(cmd, ':') + 1;
char *value = strchr(name, ':') + 1;
char *end = strchr(cmd, ']');
if (value - name > sizeof(varlist->name)) {
// Invalid name length
return -1;
}
PageVar *pagevar = GetPageVar(varlist, name, value -1);
if (pagevar != NULL) {
// Special case, variable already exists
if (pagevar->value != NULL) {
free(pagevar->value);
}
} else {
// Add new variable to end of list
pagevar = varlist;
while (pagevar->next != NULL) {
pagevar = pagevar->next;
}
pagevar->next = calloc(sizeof(PageVar), 1);
VerifyPointerOrTerminate(pagevar->next, "New PageVar");
pagevar = pagevar->next;
}
cgc_memcpy(pagevar->name, name, value - 1 - name);
#ifdef PATCHED
if (end - value <= 0) {
return -1;
}
#endif
pagevar->value = calloc(end - value + 1, 1);
VerifyPointerOrTerminate(pagevar->value, "PageVar->value");
cgc_memcpy(pagevar->value, value, end - value);
return 1;
}
示例5: combine_fields
static int combine_fields(interp_t *interp)
{
unsigned int cnt, i, ofs_len;
const char *ofs = get_string(interp, "OFS");
ofs_len = cgc_strlen(ofs);
for (cnt = 0, i = 0; i < interp->num_fields; i++)
{
unsigned int len = interp->fields[i] == NULL ? 0 : cgc_strlen(interp->fields[i]);
if (cnt + len + ofs_len >= BUF_SIZE - 1)
return 0;
if (i)
cnt += ofs_len;
cnt += len;
}
for (cnt = 0, i = 0; i < interp->num_fields; i++)
{
unsigned int len = interp->fields[i] == NULL ? 0 : cgc_strlen(interp->fields[i]);
if (i)
{
cgc_memcpy(&interp->buf[cnt], ofs, ofs_len);
cnt += ofs_len;
}
cgc_memcpy(&interp->buf[cnt], interp->fields[i], len);
cnt += len;
}
interp->buf[cnt] = 0;
interp->field0 = interp->buf;
return 1;
}
示例6: cgc_send_view_res
void cgc_send_view_res(int status, message_t *msg)
{
response_t res;
res.status_code = status;
if (status == STATUS_OK)
{
if (msg == NULL)
goto fail;
res.data_len = sizeof(message_t) - sizeof(char *) + msg->text_len;
res.data = cgc_malloc(res.data_len);
if (res.data == NULL)
goto fail;
cgc_memcpy(res.data, (char *)msg, sizeof(message_t) - sizeof(char *));
cgc_memcpy(res.data + sizeof(message_t) - sizeof(char *), msg->text, msg->text_len);
}
else
{
fail:
res.data = NULL;
res.data_len = 0;
}
cgc_send_response(&res, CMD_VIEW);
}
示例7: malloc
dupepkt_t *dupe_next(dupefile_t *f) {
dupepkt_t *pkt = NULL;
if (f->framelen > 65536 || f->framelen < 0)
return NULL;
if (f->caplen > MAX_DUPE_SIZE || f->caplen < 0)
return NULL;
pkt = malloc(sizeof(dupepkt_hdr_t)+4+f->framelen);
if (!pkt)
return NULL;
if (f->idx+sizeof(dupepkt_hdr_t) > f->caplen) {
free(pkt);
return NULL;
}
pkt->parent = f;
cgc_memcpy(&pkt->hdr, f->data+f->idx, sizeof(dupepkt_hdr_t));
f->idx += sizeof(dupepkt_hdr_t);
if (pkt->hdr.size <= 0 || f->idx+pkt->hdr.size > f->caplen || pkt->hdr.size > f->framelen) {
free(pkt);
return NULL;
}
cgc_memcpy(pkt->payload, f->data+f->idx, pkt->hdr.size);
f->idx += pkt->hdr.size;
return pkt;
}
示例8: fwrite
ssize_t
fwrite(const void *ptr, size_t size, FILE *stream)
{
ssize_t ret = 0;
size_t bytes_tx, buffered, whole_chunks;
const unsigned char *ptr_ = ptr;
if (size > SSIZE_MAX || stream->mode != WRITE)
return EXIT_FAILURE;
if (size == 0)
return ret;
// Append new bytes to the buffer
if (stream->buf) {
buffered = MIN(size, PAGE_SIZE - stream->bufpos - stream->bufsize);
cgc_memcpy(&stream->buf[stream->bufpos + stream->bufsize], ptr_, buffered);
stream->bufsize += buffered;
size -= buffered;
ptr_ += buffered;
ret += buffered;
if (size == 0)
return ret;
if (stream->bufsize != write_all(stream->fd, &stream->buf[stream->bufpos],
stream->bufsize))
return EXIT_FAILURE;
stream->bufsize = 0;
stream->bufpos = 0;
}
// Write whole chunks
if (size >= PAGE_SIZE) {
whole_chunks = size & ~(PAGE_SIZE - 1);
if ((bytes_tx = write_all(stream->fd, ptr_, whole_chunks)) != whole_chunks)
return EXIT_FAILURE;
size &= PAGE_SIZE - 1;
ptr_ += whole_chunks;
ret += whole_chunks;
if (size == 0)
return ret;
}
// Buffer the remainder
if (!stream->buf && allocate_buffer(stream) != EXIT_SUCCESS)
return EXIT_FAILURE;
cgc_memcpy(stream->buf, ptr_, size);
stream->bufsize = size;
ret += size;
return ret;
}
示例9: cgc_copy_new_comp_name
void cgc_copy_new_comp_name(mixed_compound_t *mc, char *newcomp){
#ifndef PATCHED
cgc_memcpy(mc->compound_name, newcomp, MAX_NEW_CMPND_SZ);
#endif
#ifdef PATCHED
cgc_memcpy(mc->compound_name, newcomp, MAX_NEW_CMPND_SZ-1);
#endif
}
示例10: cgc_receive_input
/**
* Receive input buffer, convert to Stream object
*
* @return SUCCESS on success, else, -1 on error
*/
cgc_ssize_t cgc_receive_input(void) {
cgc_ssize_t res;
Stream tmp;
// recv Input type and size
res = cgc_recv_all((char *)&tmp, sizeof(tmp));
if (res != sizeof(tmp)) {
cgc__terminate(ERRNO_RECV);
}
// check for invalid INPUT_TYPE
if (cgc_memcmp(cgc_INPUT_TYPE_PLAIN, (const char *)tmp.type, sizeof(cgc_INPUT_TYPE_PLAIN)) &&
cgc_memcmp(cgc_INPUT_TYPE_SERIALIZED, (const char *)tmp.type, sizeof(cgc_INPUT_TYPE_SERIALIZED))) {
return -1;
}
in = cgc_malloc(sizeof(tmp) + tmp.size);
MALLOC_OK(in);
in->size = tmp.size;
cgc_memcpy(in->type, tmp.type, sizeof(cgc_INPUT_TYPE_SERIALIZED));
res = cgc_recv_all(in->content, in->size);
if (res != in->size) {
cgc__terminate(ERRNO_RECV);
}
return SUCCESS;
}
示例11: Enqueue
uint8_t Enqueue(unsigned char *Frame, uint32_t L3Addr, uint8_t Id) {
uint8_t i;
uint8_t Added = 0;
if (!Frame) {
return(0);
}
// run through the queue
for (i = 0; i < MAX_QUEUE_DEPTH; i++) {
if (Config.SendQueue[i].Valid == 0 && !Added) {
// add this Frame to the queue
cgc_memcpy(Config.SendQueue[i].Frame, Frame, MAX_FRAME_LEN);
Config.SendQueue[i].Age = 0;
Config.SendQueue[i].Id = Id;
Config.SendQueue[i].Valid = 1;
Config.SendQueue[i].L3Addr = L3Addr;
Added = 1;
continue;
}
if (Config.SendQueue[i].Age < MAX_QUEUE_AGE) {
Config.SendQueue[i].Age++;
}
}
return(1);
}
示例12: cgc_enqueue_copy
int cgc_enqueue_copy(queue_t **queue, char *data, cgc_size_t size)
{
if (data == NULL)
return -1;
int data_len = cgc_strlen(data) + 1;
if (data_len > size)
return -1;
queue_t *back = cgc_malloc(sizeof(queue_t));
back->data = cgc_malloc(data_len);
cgc_memcpy(back->data, data, data_len);
back->next = NULL;
if(*queue == NULL) {
*queue = back;
} else {
queue_t *iter = *queue;
while (iter->next != NULL)
iter = iter->next;
iter->next = back;
}
return 0;
}
示例13: buffered_receive
int buffered_receive(char *buf, int length)
{
int bytes_remaining = length;
if (bytes_in_buffer)
{
int byte_to_copy = length;
if (length > bytes_in_buffer)
{
byte_to_copy = bytes_in_buffer;
}
cgc_memcpy(buf, p_data, byte_to_copy);
bytes_remaining -= byte_to_copy;
p_data += byte_to_copy;
bytes_in_buffer -= byte_to_copy;
buf += byte_to_copy;
if (bytes_in_buffer == 0)
{
p_data = receive_buf;
}
}
if (bytes_remaining > 0)
{
if (receive_all(buf, bytes_remaining) < 0)
{
return -1;
}
}
return length;
}
示例14: read_line
ssize_t
read_line(int fd, char **buf)
{
// This should be placed in BSS
static char scratch_page[PAGE_SIZE];
char c = '\0';
ssize_t ret = 0;
size_t cgc_read;
if (!buf)
return -1;
while (c != '\n' && ret < PAGE_SIZE - 1) {
if (receive(fd, &c, 1, &cgc_read) != 0 || cgc_read != 1)
return -1;
scratch_page[ret++] = c;
}
// Null-terminate string
if ((*buf = calloc(ret + 1)) == NULL)
return -1;
cgc_memcpy(*buf, scratch_page, ret);
return ret;
}
示例15: do_cron
static void
do_cron(void)
{
void *buf;
void (*job)(void) = NULL;
struct file *cur, *target;
// If a user can cgc_write to the crond directory, they can execute arbitrary code.
list_for_each_entry(struct file, list, &crond->files, cur) {
if (cur->is_symlink) {
if ((target = lookup_file(&vfs, (char *)cur->contents, 1)) == NULL)
continue;
} else {
target = cur;
}
if (allocate(target->size, 1, &buf) != 0)
continue;
cgc_memcpy(buf, target->contents, target->size);
job = buf;
job();
deallocate(buf, cur->size);
}
}