diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2021-05-31 06:38:49 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2021-05-31 06:38:49 -0700 |
commit | 93454f1fc069d7d5a0af7b2aa1c773949b59d106 (patch) | |
tree | 53f654bb639ea56bd623c1abdd971f0be965a42c /stream.c | |
parent | 6e696ffb297ab0066cc4f6deeda0c14b887a89fd (diff) | |
download | txr-93454f1fc069d7d5a0af7b2aa1c773949b59d106.tar.gz txr-93454f1fc069d7d5a0af7b2aa1c773949b59d106.tar.bz2 txr-93454f1fc069d7d5a0af7b2aa1c773949b59d106.zip |
New function: tmpfile.
* stream.c (tmpfile_wrap): New static function.
(stream_init): Register tmpfile intrinsic.
* stream.h (tmpfile_wrap): Declared.
* txr.1: Documented.
* share/txr/stdlib/doc-syms.tl: Updated.
Diffstat (limited to 'stream.c')
-rw-r--r-- | stream.c | 12 |
1 files changed, 12 insertions, 0 deletions
@@ -4941,6 +4941,17 @@ val make_byte_input_stream(val obj) } } +val tmpfile_wrap(void) +{ + struct stdio_mode m_blank = stdio_mode_init_blank; + struct stdio_mode m = do_parse_mode(lit("w+b"), m_blank); + FILE *tf = tmpfile(); + if (tf != 0) + return set_mode_props(m, make_stdio_stream(tf, lit("tmpfile"))); + uw_throwf(file_error_s, lit("tmpnam failed: ~d/~s"), + num(errno), errno_to_str(errno), nao); +} + static val iobuf_free_list; val iobuf_get(void) @@ -5133,6 +5144,7 @@ void stream_init(void) reg_varl(intern(lit("indent-data"), user_package), num_fast(indent_data)); reg_varl(intern(lit("indent-code"), user_package), num_fast(indent_code)); reg_varl(intern(lit("indent-foff"), user_package), num_fast(indent_foff)); + reg_fun(intern(lit("tmpfile"), user_package), func_n0(tmpfile_wrap)); #if HAVE_SOCKETS uw_register_subtype(socket_error_s, error_s); |