Rev 1530 | Rev 1653 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
| Rev 1530 | Rev 1538 | ||
|---|---|---|---|
| Line 28... | Line 28... | ||
| 28 | 28 | ||
| 29 | #include <string.h> |
29 | #include <string.h> |
| 30 | #include <unistd.h> |
30 | #include <unistd.h> |
| 31 | #include <ctype.h> |
31 | #include <ctype.h> |
| 32 | #include <limits.h> |
32 | #include <limits.h> |
| - | 33 | #include <align.h> |
|
| 33 | 34 | ||
| 34 | 35 | ||
| 35 | /* Dummy implementation of mem/ functions */ |
36 | /* Dummy implementation of mem/ functions */ |
| 36 | 37 | ||
| 37 | void * memset(void *s, int c, size_t n) |
38 | void * memset(void *s, int c, size_t n) |
| Line 40... | Line 41... | ||
| 40 | while (n--) |
41 | while (n--) |
| 41 | *(os++) = c; |
42 | *(os++) = c; |
| 42 | return s; |
43 | return s; |
| 43 | } |
44 | } |
| 44 | 45 | ||
| - | 46 | struct along {unsigned long n; } __attribute__ ((packed)); |
|
| - | 47 | ||
| - | 48 | static void * unaligned_memcpy(void *dst, const void *src, size_t n) |
|
| - | 49 | { |
|
| - | 50 | int i, j; |
|
| - | 51 | struct along *adst = dst; |
|
| - | 52 | const struct along *asrc = src; |
|
| - | 53 | ||
| - | 54 | for (i = 0; i < n/sizeof(unsigned long); i++) |
|
| - | 55 | adst[i].n = asrc[i].n; |
|
| - | 56 | ||
| - | 57 | for (j = 0; j < n%sizeof(unsigned long); j++) |
|
| - | 58 | ((unsigned char *)(((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j]; |
|
| - | 59 | ||
| - | 60 | return (char *)src; |
|
| - | 61 | } |
|
| - | 62 | ||
| 45 | void * memcpy(void *dst, const void *src, size_t n) |
63 | void * memcpy(void *dst, const void *src, size_t n) |
| 46 | { |
64 | { |
| 47 | int i, j; |
65 | int i, j; |
| 48 | 66 | ||
| - | 67 | if (((long)dst & (sizeof(long)-1)) || ((long)src & (sizeof(long)-1))) |
|
| - | 68 | return unaligned_memcpy(dst, src, n); |
|
| - | 69 | ||
| 49 | for (i = 0; i < n/sizeof(unsigned long); i++) |
70 | for (i = 0; i < n/sizeof(unsigned long); i++) |
| 50 | ((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; |
71 | ((unsigned long *) dst)[i] = ((unsigned long *) src)[i]; |
| 51 | 72 | ||
| 52 | for (j = 0; j < n%sizeof(unsigned long); j++) |
73 | for (j = 0; j < n%sizeof(unsigned long); j++) |
| 53 | ((unsigned char *)(((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j]; |
74 | ((unsigned char *)(((unsigned long *) dst) + i))[j] = ((unsigned char *)(((unsigned long *) src) + i))[j]; |