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
b11b85ad
Commit
b11b85ad
authored
Apr 18, 2014
by
Damien George
Browse files
py: Allow to pass buffer protocol flags to get_buffer helper funcs.
parent
a8f5d15f
Changes
6
Hide whitespace changes
Inline
Side-by-side
py/modstruct.c
View file @
b11b85ad
...
...
@@ -56,7 +56,7 @@ STATIC mp_obj_t struct_unpack(mp_obj_t fmt_in, mp_obj_t data_in) {
uint
size
=
calcsize_items
(
fmt
);
mp_obj_tuple_t
*
res
=
mp_obj_new_tuple
(
size
,
NULL
);
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
data_in
,
&
bufinfo
);
mp_get_buffer_raise
(
data_in
,
&
bufinfo
,
MP_BUFFER_READ
);
byte
*
p
=
bufinfo
.
buf
;
for
(
uint
i
=
0
;
i
<
size
;
i
++
)
{
...
...
py/obj.c
View file @
b11b85ad
...
...
@@ -357,20 +357,20 @@ mp_obj_t mp_identity(mp_obj_t self) {
}
MP_DEFINE_CONST_FUN_OBJ_1
(
mp_identity_obj
,
mp_identity
);
bool
mp_get_buffer
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
)
{
bool
mp_get_buffer
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
,
int
flags
)
{
mp_obj_type_t
*
type
=
mp_obj_get_type
(
obj
);
if
(
type
->
buffer_p
.
get_buffer
==
NULL
)
{
return
false
;
}
int
ret
=
type
->
buffer_p
.
get_buffer
(
obj
,
bufinfo
,
MP_BUFFER_READ
);
int
ret
=
type
->
buffer_p
.
get_buffer
(
obj
,
bufinfo
,
flags
);
if
(
ret
!=
0
||
bufinfo
->
buf
==
NULL
)
{
return
false
;
}
return
true
;
}
void
mp_get_buffer_raise
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
)
{
if
(
!
mp_get_buffer
(
obj
,
bufinfo
))
{
void
mp_get_buffer_raise
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
,
int
flags
)
{
if
(
!
mp_get_buffer
(
obj
,
bufinfo
,
flags
))
{
nlr_raise
(
mp_obj_new_exception_msg
(
&
mp_type_TypeError
,
"object with buffer protocol required"
));
}
}
py/obj.h
View file @
b11b85ad
...
...
@@ -209,8 +209,8 @@ typedef struct _mp_buffer_info_t {
typedef
struct
_mp_buffer_p_t
{
machine_int_t
(
*
get_buffer
)(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
,
int
flags
);
}
mp_buffer_p_t
;
bool
mp_get_buffer
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
);
void
mp_get_buffer_raise
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
);
bool
mp_get_buffer
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
,
int
flags
);
void
mp_get_buffer_raise
(
mp_obj_t
obj
,
mp_buffer_info_t
*
bufinfo
,
int
flags
);
// Stream protocol
typedef
struct
_mp_stream_p_t
{
...
...
py/objfun.c
View file @
b11b85ad
...
...
@@ -427,7 +427,7 @@ STATIC machine_uint_t convert_obj_for_inline_asm(mp_obj_t obj) {
return
(
machine_uint_t
)
items
;
}
else
{
mp_buffer_info_t
bufinfo
;
if
(
mp_get_buffer
(
obj
,
&
bufinfo
))
{
if
(
mp_get_buffer
(
obj
,
&
bufinfo
,
MP_BUFFER_WRITE
))
{
// supports the buffer protocol, return a pointer to the data
return
(
machine_uint_t
)
bufinfo
.
buf
;
}
else
{
...
...
py/objint.c
View file @
b11b85ad
...
...
@@ -273,7 +273,7 @@ STATIC mp_obj_t int_from_bytes(uint n_args, const mp_obj_t *args) {
// get the buffer info
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
args
[
1
],
&
bufinfo
);
mp_get_buffer_raise
(
args
[
1
],
&
bufinfo
,
MP_BUFFER_READ
);
// convert the bytes to an integer
machine_uint_t
value
=
0
;
...
...
unix/modsocket.c
View file @
b11b85ad
...
...
@@ -81,7 +81,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_1(socket_fileno_obj, socket_fileno);
STATIC
mp_obj_t
socket_connect
(
mp_obj_t
self_in
,
mp_obj_t
addr_in
)
{
mp_obj_socket_t
*
self
=
self_in
;
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
addr_in
,
&
bufinfo
);
mp_get_buffer_raise
(
addr_in
,
&
bufinfo
,
MP_BUFFER_READ
);
int
r
=
connect
(
self
->
fd
,
(
const
struct
sockaddr
*
)
bufinfo
.
buf
,
bufinfo
.
len
);
RAISE_ERRNO
(
r
,
errno
);
return
mp_const_none
;
...
...
@@ -91,7 +91,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_2(socket_connect_obj, socket_connect);
STATIC
mp_obj_t
socket_bind
(
mp_obj_t
self_in
,
mp_obj_t
addr_in
)
{
mp_obj_socket_t
*
self
=
self_in
;
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
addr_in
,
&
bufinfo
);
mp_get_buffer_raise
(
addr_in
,
&
bufinfo
,
MP_BUFFER_READ
);
int
r
=
bind
(
self
->
fd
,
(
const
struct
sockaddr
*
)
bufinfo
.
buf
,
bufinfo
.
len
);
RAISE_ERRNO
(
r
,
errno
);
return
mp_const_none
;
...
...
@@ -169,7 +169,7 @@ STATIC mp_obj_t socket_setsockopt(uint n_args, const mp_obj_t *args) {
optlen
=
sizeof
(
val
);
}
else
{
mp_buffer_info_t
bufinfo
;
mp_get_buffer_raise
(
args
[
3
],
&
bufinfo
);
mp_get_buffer_raise
(
args
[
3
],
&
bufinfo
,
MP_BUFFER_READ
);
optval
=
bufinfo
.
buf
;
optlen
=
bufinfo
.
len
;
}
...
...
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