ref: 812dc24c837fc55cd0912e2e125a6a997e8a3f19
parent: 0f0024116ec937f749ea6f146d1b9af648cf2ac0
author: Sigrid Solveig Haflínudóttir <sigrid@ftrv.se>
date: Thu Mar 20 03:25:34 EDT 2025
ios: always have a filename allocated
--- a/src/io.c
+++ b/src/io.c
@@ -365,6 +365,7 @@
}else{
((u8int*)cv->data)[n] = 0;
}
+ ios_free(&dest);
if(n == 0 && ios_eof(src))
return sl_eof;
return str;
--- a/src/ios.c
+++ b/src/ios.c
@@ -614,9 +614,7 @@
ios_setbuf(sl_ios *s, u8int *buf, usize size, bool own)
{
ios_flush(s);
- usize nvalid;
-
- nvalid = size < s->size ? size : s->size;
+ usize nvalid = size < s->size ? size : s->size;
if(nvalid > 0)
memcpy(buf, s->buf, nvalid);
if(s->bpos > nvalid){
@@ -763,7 +761,7 @@
flags |= O_CREAT;
fd = open(fname, flags, 0644);
#endif
- s = ios_fd(s, fd, 1, 1);
+ s = ios_fd(s, fd, fname, true, true);
if(fd < 0)
goto open_file_err;
if(!wr && rd)
@@ -770,7 +768,6 @@
s->readonly = true;
if(wr && !rd)
s->writeonly = true;
- s->loc.filename = MEM_STRDUP(fname);
return s;
open_file_err:
s->fd = -1;
@@ -798,7 +795,7 @@
}
sl_ios *
-ios_fd(sl_ios *s, int fd, bool isfile, bool own)
+ios_fd(sl_ios *s, int fd, const char *name, bool isfile, bool own)
{
_ios_init(s);
s->fd = fd;
@@ -806,8 +803,7 @@
s->rereadable = true;
_buf_init(s, bm_block);
s->ownfd = own;
- if(fd == STDERR_FILENO)
- s->bm = bm_none;
+ s->loc.filename = MEM_STRDUP(name);
return s;
}
@@ -815,18 +811,15 @@
ios_init_std(void)
{
ios_stdin = MEM_ALLOC(sizeof(sl_ios));
- ios_fd(ios_stdin, STDIN_FILENO, 0, 0);
- ios_stdin->loc.filename = MEM_STRDUP("*stdin*");
+ ios_fd(ios_stdin, STDIN_FILENO, "*stdin*", false, false);
ios_stdout = MEM_ALLOC(sizeof(sl_ios));
- ios_fd(ios_stdout, STDOUT_FILENO, 0, 0);
+ ios_fd(ios_stdout, STDOUT_FILENO, "*stdout*", false, false);
ios_stdout->bm = bm_line;
- ios_stdout->loc.filename = MEM_STRDUP("*stdout*");
ios_stderr = MEM_ALLOC(sizeof(sl_ios));
- ios_fd(ios_stderr, STDERR_FILENO, 0, 0);
+ ios_fd(ios_stderr, STDERR_FILENO, "*stderr*", false, false);
ios_stderr->bm = bm_none;
- ios_stderr->loc.filename = MEM_STRDUP("*stderr*");
}
/* higher level interface */
--- a/src/ios.h
+++ b/src/ios.h
@@ -84,7 +84,7 @@
sl_ios *ios_file(sl_ios *s, char *fname, bool rd, bool wr, bool create, bool trunc);
sl_ios *ios_mem(sl_ios *s, usize initsize);
sl_ios *ios_static_buffer(sl_ios *s, const u8int *buf, usize sz);
-sl_ios *ios_fd(sl_ios *s, int fd, bool isfile, bool own);
+sl_ios *ios_fd(sl_ios *s, int fd, const char *name, bool isfile, bool own);
// todo: ios_socket
extern sl_ios *ios_stdin;
extern sl_ios *ios_stdout;
--- a/src/plan9/lsd.c
+++ b/src/plan9/lsd.c
@@ -319,8 +319,7 @@
free(proc_stdin);
}
proc_stdin = MEM_ALLOC(sizeof(*proc_stdin));
- ios_fd(proc_stdin, p, 0, 0);
- proc_stdin->loc.filename = MEM_STRDUP("proc-stdin");
+ ios_fd(proc_stdin, p, "proc-stdin", false, false);
v = alloc_vec(2, 0);
sl_gc_handle(&v);