fx: stream: add fx_stream_write_wstr
This commit is contained in:
@@ -97,6 +97,8 @@ FX_API fx_status fx_stream_read_all_bytes_s(
|
|||||||
FX_API fx_status fx_stream_write_char(fx_stream *stream, fx_wchar c);
|
FX_API fx_status fx_stream_write_char(fx_stream *stream, fx_wchar c);
|
||||||
FX_API fx_status
|
FX_API fx_status
|
||||||
fx_stream_write_cstr(fx_stream *stream, const char *s, size_t *nr_written);
|
fx_stream_write_cstr(fx_stream *stream, const char *s, size_t *nr_written);
|
||||||
|
FX_API fx_status
|
||||||
|
fx_stream_write_wstr(fx_stream *stream, const fx_wchar *s, size_t *nr_written);
|
||||||
|
|
||||||
FX_API fx_status fx_stream_write_bytes(
|
FX_API fx_status fx_stream_write_bytes(
|
||||||
fx_stream *stream,
|
fx_stream *stream,
|
||||||
|
|||||||
+58
-16
@@ -612,6 +612,29 @@ static enum fx_status stream_write_cstr(
|
|||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static enum fx_status stream_write_wstr(
|
||||||
|
struct stream_data *stream,
|
||||||
|
const fx_wchar *s,
|
||||||
|
size_t *nr_written)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
enum fx_status status = FX_SUCCESS;
|
||||||
|
|
||||||
|
for (i = 0; s[i]; i++) {
|
||||||
|
status = stream_write_char(stream, s[i]);
|
||||||
|
|
||||||
|
if (!FX_OK(status)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nr_written) {
|
||||||
|
*nr_written = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
static fx_stream *init_stdio_stream(FILE *fp, fx_stream_mode mode)
|
static fx_stream *init_stdio_stream(FILE *fp, fx_stream_mode mode)
|
||||||
{
|
{
|
||||||
fx_stdio_stream *stream = fx_object_create(FX_TYPE_STDIO_STREAM);
|
fx_stdio_stream *stream = fx_object_create(FX_TYPE_STDIO_STREAM);
|
||||||
@@ -619,8 +642,9 @@ static fx_stream *init_stdio_stream(FILE *fp, fx_stream_mode mode)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct fx_stdio_stream_p *p
|
struct fx_stdio_stream_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(stream, FX_TYPE_STDIO_STREAM);
|
stream,
|
||||||
|
FX_TYPE_STDIO_STREAM);
|
||||||
fx_stream_cfg *cfg = fx_object_get_protected(stream, FX_TYPE_STREAM);
|
fx_stream_cfg *cfg = fx_object_get_protected(stream, FX_TYPE_STREAM);
|
||||||
p->s_fp = fp;
|
p->s_fp = fp;
|
||||||
cfg->s_mode = mode;
|
cfg->s_mode = mode;
|
||||||
@@ -657,8 +681,8 @@ static enum fx_status stream_push_indent(struct stream_data *stream, int indent)
|
|||||||
stream->s_private->s_istack_size += 4;
|
stream->s_private->s_istack_size += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cur_indent
|
int cur_indent = stream->s_private
|
||||||
= stream->s_private->s_istack[stream->s_private->s_istack_ptr];
|
->s_istack[stream->s_private->s_istack_ptr];
|
||||||
stream->s_private->s_istack[++stream->s_private->s_istack_ptr]
|
stream->s_private->s_istack[++stream->s_private->s_istack_ptr]
|
||||||
= cur_indent + indent;
|
= cur_indent + indent;
|
||||||
|
|
||||||
@@ -726,8 +750,9 @@ fx_stream_buffer *fx_stream_buffer_create_dynamic(size_t buffer_size)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct fx_stream_buffer_p *p
|
struct fx_stream_buffer_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(buffer, FX_TYPE_STREAM_BUFFER);
|
buffer,
|
||||||
|
FX_TYPE_STREAM_BUFFER);
|
||||||
|
|
||||||
p->p_buf = malloc(buffer_size);
|
p->p_buf = malloc(buffer_size);
|
||||||
if (!p->p_buf) {
|
if (!p->p_buf) {
|
||||||
@@ -748,8 +773,9 @@ fx_stream_buffer *fx_stream_buffer_create(void *buf, size_t len)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct fx_stream_buffer_p *p
|
struct fx_stream_buffer_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(buffer, FX_TYPE_STREAM_BUFFER);
|
buffer,
|
||||||
|
FX_TYPE_STREAM_BUFFER);
|
||||||
|
|
||||||
p->p_buf = buf;
|
p->p_buf = buf;
|
||||||
p->p_buf_len = len;
|
p->p_buf_len = len;
|
||||||
@@ -960,6 +986,18 @@ enum fx_status fx_stream_write_cstr(
|
|||||||
STREAM_DISPATCH_VIRTUAL(stream_write_cstr, stream, s, nr_written);
|
STREAM_DISPATCH_VIRTUAL(stream_write_cstr, stream, s, nr_written);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum fx_status fx_stream_write_wstr(
|
||||||
|
fx_stream *stream,
|
||||||
|
const fx_wchar *s,
|
||||||
|
size_t *nr_written)
|
||||||
|
{
|
||||||
|
if (IS_BSTR(stream)) {
|
||||||
|
return fx_bstr_write_wstr((fx_bstr *)stream, s, nr_written);
|
||||||
|
}
|
||||||
|
|
||||||
|
STREAM_DISPATCH_VIRTUAL(stream_write_wstr, stream, s, nr_written);
|
||||||
|
}
|
||||||
|
|
||||||
enum fx_status fx_stream_write_bytes(
|
enum fx_status fx_stream_write_bytes(
|
||||||
fx_stream *stream,
|
fx_stream *stream,
|
||||||
const void *buf,
|
const void *buf,
|
||||||
@@ -1092,8 +1130,9 @@ static enum fx_status stdio_read(
|
|||||||
size_t max,
|
size_t max,
|
||||||
size_t *nr_read)
|
size_t *nr_read)
|
||||||
{
|
{
|
||||||
struct fx_stdio_stream_p *p
|
struct fx_stdio_stream_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(stream, FX_TYPE_STDIO_STREAM);
|
stream,
|
||||||
|
FX_TYPE_STDIO_STREAM);
|
||||||
|
|
||||||
enum fx_status status = FX_SUCCESS;
|
enum fx_status status = FX_SUCCESS;
|
||||||
|
|
||||||
@@ -1113,8 +1152,9 @@ static enum fx_status stdio_write(
|
|||||||
size_t count,
|
size_t count,
|
||||||
size_t *nr_written)
|
size_t *nr_written)
|
||||||
{
|
{
|
||||||
struct fx_stdio_stream_p *p
|
struct fx_stdio_stream_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(stream, FX_TYPE_STDIO_STREAM);
|
stream,
|
||||||
|
FX_TYPE_STDIO_STREAM);
|
||||||
|
|
||||||
enum fx_status status = FX_SUCCESS;
|
enum fx_status status = FX_SUCCESS;
|
||||||
size_t w = fwrite(data, 1, count, p->s_fp);
|
size_t w = fwrite(data, 1, count, p->s_fp);
|
||||||
@@ -1132,8 +1172,9 @@ static enum fx_status stdio_seek(
|
|||||||
long long offset,
|
long long offset,
|
||||||
fx_stream_seek_origin origin)
|
fx_stream_seek_origin origin)
|
||||||
{
|
{
|
||||||
struct fx_stdio_stream_p *p
|
struct fx_stdio_stream_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(stream, FX_TYPE_STDIO_STREAM);
|
stream,
|
||||||
|
FX_TYPE_STDIO_STREAM);
|
||||||
|
|
||||||
int whence = 0;
|
int whence = 0;
|
||||||
switch (origin) {
|
switch (origin) {
|
||||||
@@ -1160,8 +1201,9 @@ static enum fx_status stdio_seek(
|
|||||||
|
|
||||||
static enum fx_status stdio_tell(const fx_stream *stream, size_t *cursor)
|
static enum fx_status stdio_tell(const fx_stream *stream, size_t *cursor)
|
||||||
{
|
{
|
||||||
struct fx_stdio_stream_p *p
|
struct fx_stdio_stream_p *p = fx_object_get_private(
|
||||||
= fx_object_get_private(stream, FX_TYPE_STDIO_STREAM);
|
stream,
|
||||||
|
FX_TYPE_STDIO_STREAM);
|
||||||
|
|
||||||
long pos = ftell(p->s_fp);
|
long pos = ftell(p->s_fp);
|
||||||
if (pos == -1L) {
|
if (pos == -1L) {
|
||||||
|
|||||||
Reference in New Issue
Block a user