T1 EmMem_memmove (T1 dst, T2 src, size_t len) { T1 q = dst; T2 p = src; Bool backward = _get_real_address(dst) <= _get_real_address(src); if (backward) { while (len--) { _put_byte(q, _get_byte(p)); _increment (q); _increment (p); } } else { _add_delta (q, len); _add_delta (p, len); while (len--) { _decrement (q); _decrement (p); _put_byte(q, _get_byte(p)); } } return dst; }
T1 EmMem_strncat(T1 dst, T2 src, size_t len) { T1 q = dst; T2 p = src; while (_get_byte (q)) _increment (q); ++len; while (--len) { char ch = _get_byte(p); _increment (p); _put_byte (q, ch); _increment (q); if (!ch) return dst; } _put_byte (q, 0); return dst; }
uint32_t FileManager::_get_long() { uint32_t x = static_cast<uint32_t>(_get_byte()); int c; x +=(static_cast<uint32_t>(_get_byte())) << 8; x +=(static_cast<uint32_t>(_get_byte())) << 16; c = _get_byte(); if (c == EOF) _z_err = Z_DATA_ERROR; x +=(static_cast<uint32_t>(c)) << 24; return x; }
T1 EmMem_strncpy(T1 dst, T2 src, size_t len) { T1 q = dst; T2 p = src; ++len; while (--len) { char ch = _get_byte(p); _increment (p); _put_byte (q, ch); _increment (q); if (!ch) { while (--len) { _put_byte (q, 0); _increment (q); } break; } } return dst; }
static inline u32 _get_slice(void **pp, unsigned char *dp) { unsigned int len, i; len = i = _get_word(pp); while (i-- > 0) *dp++ = _get_byte(pp); return len; }
size_t EmMem_strlen(emuptr str) { emuptr eos = str; while (_get_byte(eos)) _increment (eos); return ((size_t) (eos - str)); }
T1 EmMem_strcat(T1 dst, T2 src) { T1 q = dst; T2 p = src; while (_get_byte (q)) _increment(q); while (_get_byte (p)) { _put_byte (q, _get_byte (p)); _increment(q); _increment(p); } _put_byte (q, 0); return dst; }
int EmMem_memcmp(T1 src1, T2 src2, size_t len) { T1 p1 = src1; T2 p2 = src2; ++len; while (--len) { unsigned char ch1 = _get_byte (p1); unsigned char ch2 = _get_byte (p2); if (ch1 != ch2) return (ch1 < ch2) ? -1 : 1; _increment (p1); _increment (p2); } return 0; }
int EmMem_strcmp(T1 dst, T2 src) { T1 p1 = dst; T2 p2 = src; while (1) { unsigned char c1 = _get_byte (p1); unsigned char c2 = _get_byte (p2); if (c1 != c2) return (c1 - c2); else if (!c1) break; _increment (p1); _increment (p2); } return 0; }
T1 EmMem_memcpy (T1 dst, T2 src, size_t len) { T1 q = dst; T2 p = src; while (len--) { _put_byte(q, _get_byte(p)); _increment (q); _increment (p); } return dst; }
T1 EmMem_strcpy(T1 dst, T2 src) { T1 q = dst; T2 p = src; char ch; do { ch = _get_byte (p); _increment (p); _put_byte (q, ch); _increment (q); } while (ch); return dst; }
emuptr EmMem_memchr(emuptr src, int val, size_t len) { emuptr p = src; ++len; while (--len) { if (_get_byte (p) == val) return p; _increment (p); } return EmMemNULL; }
static void c4_handle_rx(avmcard *card) { avmcard_dmainfo *dma = card->dma; struct capi_ctr *ctrl; avmctrl_info *cinfo; struct sk_buff *skb; void *p = dma->recvbuf.dmabuf; u32 ApplId, MsgLen, DataB3Len, NCCI, WindowSize; u8 b1cmd = _get_byte(&p); u32 cidx; #ifdef AVM_C4_DEBUG printk(KERN_DEBUG "%s: rx 0x%x len=%lu\n", card->name, b1cmd, (unsigned long)dma->recvlen); #endif switch (b1cmd) { case RECEIVE_DATA_B3_IND: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); DataB3Len = _get_slice(&p, card->databuf); cidx = CAPIMSG_CONTROLLER(card->msgbuf)-card->cardnr; if (cidx >= card->nlogcontr) cidx = 0; ctrl = &card->ctrlinfo[cidx].capi_ctrl; if (MsgLen < 30) { /* not CAPI 64Bit */ memset(card->msgbuf+MsgLen, 0, 30-MsgLen); MsgLen = 30; CAPIMSG_SETLEN(card->msgbuf, 30); } if (!(skb = alloc_skb(DataB3Len+MsgLen, GFP_ATOMIC))) { printk(KERN_ERR "%s: incoming packet dropped\n", card->name); } else { memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); memcpy(skb_put(skb, DataB3Len), card->databuf, DataB3Len); capi_ctr_handle_message(ctrl, ApplId, skb); } break; case RECEIVE_MESSAGE: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); cidx = CAPIMSG_CONTROLLER(card->msgbuf)-card->cardnr; if (cidx >= card->nlogcontr) cidx = 0; cinfo = &card->ctrlinfo[cidx]; ctrl = &card->ctrlinfo[cidx].capi_ctrl; if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { printk(KERN_ERR "%s: incoming packet dropped\n", card->name); } else { memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); if (CAPIMSG_CMD(skb->data) == CAPI_DATA_B3_CONF) capilib_data_b3_conf(&cinfo->ncci_head, ApplId, CAPIMSG_NCCI(skb->data), CAPIMSG_MSGID(skb->data)); capi_ctr_handle_message(ctrl, ApplId, skb); } break; case RECEIVE_NEW_NCCI: ApplId = _get_word(&p); NCCI = _get_word(&p); WindowSize = _get_word(&p); cidx = (NCCI&0x7f) - card->cardnr; if (cidx >= card->nlogcontr) cidx = 0; capilib_new_ncci(&card->ctrlinfo[cidx].ncci_head, ApplId, NCCI, WindowSize); break; case RECEIVE_FREE_NCCI: ApplId = _get_word(&p); NCCI = _get_word(&p); if (NCCI != 0xffffffff) { cidx = (NCCI&0x7f) - card->cardnr; if (cidx >= card->nlogcontr) cidx = 0; capilib_free_ncci(&card->ctrlinfo[cidx].ncci_head, ApplId, NCCI); } break; case RECEIVE_START: #ifdef AVM_C4_POLLDEBUG printk(KERN_INFO "%s: poll from c4\n", card->name); #endif if (!suppress_pollack) queue_pollack(card); for (cidx=0; cidx < card->nr_controllers; cidx++) { ctrl = &card->ctrlinfo[cidx].capi_ctrl; capi_ctr_resume_output(ctrl); } break; case RECEIVE_STOP: for (cidx=0; cidx < card->nr_controllers; cidx++) { ctrl = &card->ctrlinfo[cidx].capi_ctrl; capi_ctr_suspend_output(ctrl); } break; case RECEIVE_INIT: cidx = card->nlogcontr; if (cidx >= card->nr_controllers) { printk(KERN_ERR "%s: card with %d controllers ??\n", card->name, cidx+1); break; } card->nlogcontr++; cinfo = &card->ctrlinfo[cidx]; ctrl = &cinfo->capi_ctrl; cinfo->versionlen = _get_slice(&p, cinfo->versionbuf); b1_parse_version(cinfo); printk(KERN_INFO "%s: %s-card (%s) now active\n", card->name, cinfo->version[VER_CARDTYPE], cinfo->version[VER_DRIVER]); capi_ctr_ready(&cinfo->capi_ctrl); break; case RECEIVE_TASK_READY: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); card->msgbuf[MsgLen] = 0; while ( MsgLen > 0 && ( card->msgbuf[MsgLen-1] == '\n' || card->msgbuf[MsgLen-1] == '\r')) { card->msgbuf[MsgLen-1] = 0; MsgLen--; } printk(KERN_INFO "%s: task %d \"%s\" ready.\n", card->name, ApplId, card->msgbuf); break; case RECEIVE_DEBUGMSG: MsgLen = _get_slice(&p, card->msgbuf); card->msgbuf[MsgLen] = 0; while ( MsgLen > 0 && ( card->msgbuf[MsgLen-1] == '\n' || card->msgbuf[MsgLen-1] == '\r')) { card->msgbuf[MsgLen-1] = 0; MsgLen--; } printk(KERN_INFO "%s: DEBUG: %s\n", card->name, card->msgbuf); break; default: printk(KERN_ERR "%s: c4_interrupt: 0x%x ???\n", card->name, b1cmd); return; } }
static void b1dma_handle_rx(avmcard *card) { avmctrl_info *cinfo = &card->ctrlinfo[0]; avmcard_dmainfo *dma = card->dma; struct capi_ctr *ctrl = cinfo->capi_ctrl; struct sk_buff *skb; void *p = dma->recvbuf+4; __u32 ApplId, MsgLen, DataB3Len, NCCI, WindowSize; __u8 b1cmd = _get_byte(&p); #ifdef CONFIG_B1DMA_DEBUG printk(KERN_DEBUG "rx: 0x%x %lu\n", b1cmd, (unsigned long)dma->recvlen); #endif switch (b1cmd) { case RECEIVE_DATA_B3_IND: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); DataB3Len = _get_slice(&p, card->databuf); if (MsgLen < 30) { /* not CAPI 64Bit */ memset(card->msgbuf+MsgLen, 0, 30-MsgLen); MsgLen = 30; CAPIMSG_SETLEN(card->msgbuf, 30); } if (!(skb = alloc_skb(DataB3Len+MsgLen, GFP_ATOMIC))) { printk(KERN_ERR "%s: incoming packet dropped\n", card->name); } else { memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); memcpy(skb_put(skb, DataB3Len), card->databuf, DataB3Len); ctrl->handle_capimsg(ctrl, ApplId, skb); } break; case RECEIVE_MESSAGE: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); if (!(skb = alloc_skb(MsgLen, GFP_ATOMIC))) { printk(KERN_ERR "%s: incoming packet dropped\n", card->name); } else { memcpy(skb_put(skb, MsgLen), card->msgbuf, MsgLen); ctrl->handle_capimsg(ctrl, ApplId, skb); } break; case RECEIVE_NEW_NCCI: ApplId = _get_word(&p); NCCI = _get_word(&p); WindowSize = _get_word(&p); ctrl->new_ncci(ctrl, ApplId, NCCI, WindowSize); break; case RECEIVE_FREE_NCCI: ApplId = _get_word(&p); NCCI = _get_word(&p); if (NCCI != 0xffffffff) ctrl->free_ncci(ctrl, ApplId, NCCI); else ctrl->appl_released(ctrl, ApplId); break; case RECEIVE_START: #ifdef CONFIG_B1DMA_POLLDEBUG printk(KERN_INFO "%s: receive poll\n", card->name); #endif if (!suppress_pollack) queue_pollack(card); ctrl->resume_output(ctrl); break; case RECEIVE_STOP: ctrl->suspend_output(ctrl); break; case RECEIVE_INIT: cinfo->versionlen = _get_slice(&p, cinfo->versionbuf); b1_parse_version(cinfo); printk(KERN_INFO "%s: %s-card (%s) now active\n", card->name, cinfo->version[VER_CARDTYPE], cinfo->version[VER_DRIVER]); ctrl->ready(ctrl); break; case RECEIVE_TASK_READY: ApplId = (unsigned) _get_word(&p); MsgLen = _get_slice(&p, card->msgbuf); card->msgbuf[MsgLen] = 0; while ( MsgLen > 0 && ( card->msgbuf[MsgLen-1] == '\n' || card->msgbuf[MsgLen-1] == '\r')) { card->msgbuf[MsgLen-1] = 0; MsgLen--; } printk(KERN_INFO "%s: task %d \"%s\" ready.\n", card->name, ApplId, card->msgbuf); break; case RECEIVE_DEBUGMSG: MsgLen = _get_slice(&p, card->msgbuf); card->msgbuf[MsgLen] = 0; while ( MsgLen > 0 && ( card->msgbuf[MsgLen-1] == '\n' || card->msgbuf[MsgLen-1] == '\r')) { card->msgbuf[MsgLen-1] = 0; MsgLen--; } printk(KERN_INFO "%s: DEBUG: %s\n", card->name, card->msgbuf); break; default: printk(KERN_ERR "%s: b1dma_interrupt: 0x%x ???\n", card->name, b1cmd); return; } }
void FileManager::_check_header() { int method; /* method byte */ int flags; /* flags byte */ unsigned int len; int c; /* Check the gzip magic header */ for (len = 0; len < 2; len++) { c = _get_byte(); if (c == _gz_magic[len]) continue; if ((c == EOF) &&(len == 0)) { /* * We must not change _compressed if we are at EOF; * we may have come to the end of a gzipped file and be * check to see if another gzipped file is concatenated * to this one. If one isn't, we still need to be able * to lseek on this file as a compressed file. */ return; } _compressed = 0; if (c != EOF) { _stream->avail_in++; _stream->next_in--; } _z_err = _stream->avail_in != 0 ? Z_OK : Z_STREAM_END; return; } _compressed = 1; method = _get_byte(); flags = _get_byte(); if (method != Z_DEFLATED ||(flags & RESERVED) != 0) { _z_err = Z_DATA_ERROR; return; } /* Discard time, xflags and OS code: */ for (len = 0; len < 6; len++) (void)_get_byte(); if ((flags & EXTRA_FIELD) != 0) { /* skip the extra field */ len = (unsigned int)_get_byte(); len +=((unsigned int)_get_byte()) << 8; /* len is garbage if EOF but the loop below will quit anyway */ while (len-- != 0 && _get_byte() != EOF) /*void*/; } if ((flags & ORIG_NAME) != 0) { /* skip the original file name */ while ((c = _get_byte()) != 0 && c != EOF) /*void*/; } if ((flags & COMMENT) != 0) { /* skip the .gz file comment */ while ((c = _get_byte()) != 0 && c != EOF) /*void*/; } if ((flags & HEAD_CRC) != 0) { /* skip the header crc */ for (len = 0; len < 2; len++) (void)_get_byte(); } _z_err = _z_eof ? Z_DATA_ERROR : Z_OK; }