Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
17ae2395
Commit
17ae2395
authored
Aug 29, 2014
by
Damien George
Browse files
py: Use memmove instead of memcpy when appropriate.
Found this bug by running unix/ tests with DEBUG=1 enabled when compiling.
parent
02d95d7c
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/obj.h
View file @
17ae2395
...
...
@@ -585,8 +585,8 @@ mp_obj_t mp_seq_extract_slice(uint len, const mp_obj_t *seq, mp_bound_slice_t *i
#define mp_seq_replace_slice_no_grow(dest, dest_len, beg, end, slice, slice_len, item_t) \
/*printf("memcpy(%p, %p, %d)\n", dest + beg, slice, slice_len * sizeof(item_t));*/
\
memcpy(dest + beg, slice, slice_len * sizeof(item_t)); \
/*printf("mem
cpy
(%p, %p, %d)\n", dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));*/
\
mem
cpy
(dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));
/*printf("mem
move
(%p, %p, %d)\n", dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));*/
\
mem
move
(dest + (beg + slice_len), dest + end, (dest_len - end) * sizeof(item_t));
#define mp_seq_replace_slice_grow_inplace(dest, dest_len, beg, end, slice, slice_len, len_adj, item_t) \
/*printf("memmove(%p, %p, %d)\n", dest + beg + len_adj, dest + beg, (dest_len - beg) * sizeof(item_t));*/
\
...
...
py/objlist.c
View file @
17ae2395
...
...
@@ -274,7 +274,7 @@ STATIC mp_obj_t list_pop(uint n_args, const mp_obj_t *args) {
uint
index
=
mp_get_index
(
self
->
base
.
type
,
self
->
len
,
n_args
==
1
?
MP_OBJ_NEW_SMALL_INT
(
-
1
)
:
args
[
1
],
false
);
mp_obj_t
ret
=
self
->
items
[
index
];
self
->
len
-=
1
;
mem
cpy
(
self
->
items
+
index
,
self
->
items
+
index
+
1
,
(
self
->
len
-
index
)
*
sizeof
(
mp_obj_t
));
mem
move
(
self
->
items
+
index
,
self
->
items
+
index
+
1
,
(
self
->
len
-
index
)
*
sizeof
(
mp_obj_t
));
// Clear stale pointer from slot which just got freed to prevent GC issues
self
->
items
[
self
->
len
]
=
MP_OBJ_NULL
;
if
(
self
->
alloc
>
LIST_MIN_ALLOC
&&
self
->
alloc
>
2
*
self
->
len
)
{
...
...
py/objstr.c
View file @
17ae2395
...
...
@@ -567,7 +567,7 @@ STATIC mp_obj_t str_rsplit(uint n_args, const mp_obj_t *args) {
if
(
idx
!=
0
)
{
// We split less parts than split limit, now go cleanup surplus
int
used
=
org_splits
+
1
-
idx
;
mem
cpy
(
res
->
items
,
&
res
->
items
[
idx
],
used
*
sizeof
(
mp_obj_t
));
mem
move
(
res
->
items
,
&
res
->
items
[
idx
],
used
*
sizeof
(
mp_obj_t
));
mp_seq_clear
(
res
->
items
,
used
,
res
->
alloc
,
sizeof
(
*
res
->
items
));
res
->
len
=
used
;
}
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment