Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
TASTE
uPython-mirror
Commits
11507f40
Commit
11507f40
authored
Jan 15, 2014
by
Damien George
Browse files
Merge branch 'master' of github.com:dpgeorge/micropython
parents
d02c6d89
9953ca43
Changes
3
Hide whitespace changes
Inline
Side-by-side
py/stream.c
View file @
11507f40
...
...
@@ -92,6 +92,50 @@ static mp_obj_t stream_readall(mp_obj_t self_in) {
return
mp_obj_new_str
(
qstr_from_str_take
(
buf
,
total_size
+
1
));
}
// Unbuffered, inefficient implementation of readline() for raw I/O files.
static
mp_obj_t
stream_unbuffered_readline
(
int
n_args
,
const
mp_obj_t
*
args
)
{
struct
_mp_obj_base_t
*
o
=
(
struct
_mp_obj_base_t
*
)
args
[
0
];
if
(
o
->
type
->
stream_p
.
read
==
NULL
)
{
// CPython: io.UnsupportedOperation, OSError subclass
nlr_jump
(
mp_obj_new_exception_msg
(
MP_QSTR_OSError
,
"Operation not supported"
));
}
machine_int_t
max_size
=
-
1
;
if
(
n_args
>
1
)
{
max_size
=
MP_OBJ_SMALL_INT_VALUE
(
args
[
1
]);
}
vstr_t
*
vstr
;
if
(
max_size
!=
-
1
)
{
vstr
=
vstr_new_size
(
max_size
+
1
);
// TODO: \0
}
else
{
vstr
=
vstr_new
();
}
int
error
;
while
(
max_size
==
-
1
||
max_size
--
!=
0
)
{
char
*
p
=
vstr_add_len
(
vstr
,
1
);
if
(
p
==
NULL
)
{
// TODO
nlr_jump
(
mp_obj_new_exception_msg_varg
(
MP_QSTR_OSError
/*MP_QSTR_RuntimeError*/
,
"Out of memory"
));
}
machine_int_t
out_sz
=
o
->
type
->
stream_p
.
read
(
o
,
p
,
1
,
&
error
);
if
(
out_sz
==
-
1
)
{
nlr_jump
(
mp_obj_new_exception_msg_varg
(
MP_QSTR_OSError
,
"[Errno %d]"
,
error
));
}
if
(
out_sz
==
0
||
*
p
==
'\n'
)
{
break
;
}
}
// TODO: \0
vstr_add_byte
(
vstr
,
0
);
vstr_shrink
(
vstr
);
return
mp_obj_new_str
(
qstr_from_str_take
(
vstr_str
(
vstr
),
vstr_len
(
vstr
)));
}
MP_DEFINE_CONST_FUN_OBJ_2
(
mp_stream_read_obj
,
stream_read
);
MP_DEFINE_CONST_FUN_OBJ_1
(
mp_stream_readall_obj
,
stream_readall
);
MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN
(
mp_stream_unbuffered_readline_obj
,
1
,
2
,
stream_unbuffered_readline
);
MP_DEFINE_CONST_FUN_OBJ_2
(
mp_stream_write_obj
,
stream_write
);
py/stream.h
View file @
11507f40
extern
const
mp_obj_fun_native_t
mp_stream_read_obj
;
extern
const
mp_obj_fun_native_t
mp_stream_readall_obj
;
extern
const
mp_obj_fun_native_t
mp_stream_unbuffered_readline_obj
;
extern
const
mp_obj_fun_native_t
mp_stream_write_obj
;
unix/file.c
View file @
11507f40
...
...
@@ -91,6 +91,7 @@ static mp_obj_t fdfile_make_new(mp_obj_t type_in, int n_args, const mp_obj_t *ar
static
const
mp_method_t
rawfile_type_methods
[]
=
{
{
"read"
,
&
mp_stream_read_obj
},
{
"readall"
,
&
mp_stream_readall_obj
},
{
"readline"
,
&
mp_stream_unbuffered_readline_obj
},
{
"write"
,
&
mp_stream_write_obj
},
{
"close"
,
&
fdfile_close_obj
},
{
NULL
,
NULL
},
...
...
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Attach a 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