void* buf_find_buf(const void* dest, size_t dnum, const void *src, size_t snum) { uint8_t *l__dest = (void*)dest; if ((dest == NULL) || (src == NULL)) { *tls_errno = ERR_INVALID_ADDRESS; return NULL; } if (snum > dnum) { *tls_errno = ERR_INVALID_ARGUMENT; return NULL; } if (snum == 0) { return (void*)dest; } /* We work until "dnum" is greater or equal to "snum" */ while(dnum >= snum) { if (!buf_compare(l__dest, src, snum )) return l__dest; l__dest ++; dnum --; } return NULL; }
static void memcpyperf(void *src, void *dst, u32 size, u32 cnt) { struct timespec beforets; struct timespec afterts; long val[OUT_TRY_CNT]; long sum = 0; u32 i, j; memset(src, 0xab, size); memset(dst, 0x00, size); for (j = 0; j < OUT_TRY_CNT; j++) { getnstimeofday(&beforets); for (i = 0; i < cnt; i++) memcpy(dst, src, size); getnstimeofday(&afterts); mdelay(100); val[j] = update_timeval(beforets, afterts)/cnt; } for (j = 0; j < OUT_TRY_CNT; j++) sum += val[j]; printk(KERN_ERR "%lu\n", sum/OUT_TRY_CNT); if (buf_compare(src, dst, size)) printk(KERN_ERR "copy err\n"); }
utf8_t* str_find(const utf8_t* dest, size_t dmax, const utf8_t* src, size_t smax) { utf8_t *l__dest = (void*)dest; size_t l__dnum; size_t l__snum; if ((dest == NULL) || (src == NULL)) { *tls_errno = ERR_INVALID_ADDRESS; return NULL; } /* Get the correct size of "dest" and "src" */ l__dnum = str_len(dest, dmax); if (*tls_errno) return NULL; l__snum = str_len(src, smax); if (*tls_errno) return NULL; /* Work with them */ if (l__snum > l__dnum) { return NULL; } if (l__snum == 0) { return (void*)dest; } /* We work until "dnum" is greater or equal to "snum" */ while(l__dnum >= l__snum) { if (!buf_compare(l__dest, src, l__snum)) return l__dest; l__dest ++; l__dnum --; } return NULL; }