summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2024-05-25 11:55:36 -0400
committerTavian Barnes <tavianator@tavianator.com>2024-05-25 11:55:36 -0400
commitca02fe9b77037d56dd01ea7b5d33eebb62983e44 (patch)
treebec5ea0b7366669261a931a82c80b6c0d92bec3e
parent598422e7678a719b37cc4221c637b840f4e13fcc (diff)
downloadbfs-ca02fe9b77037d56dd01ea7b5d33eebb62983e44.tar.xz
bfstd: New helper for open(ctermid())
-rw-r--r--src/bar.c9
-rw-r--r--src/bfstd.c10
-rw-r--r--src/bfstd.h10
3 files changed, 21 insertions, 8 deletions
diff --git a/src/bar.c b/src/bar.c
index b928373..be77694 100644
--- a/src/bar.c
+++ b/src/bar.c
@@ -144,14 +144,7 @@ struct bfs_bar *bfs_bar_show(void) {
return NULL;
}
- char term[L_ctermid];
- ctermid(term);
- if (strlen(term) == 0) {
- errno = ENOTTY;
- goto fail;
- }
-
- bar->fd = open(term, O_RDWR | O_CLOEXEC);
+ bar->fd = open_cterm(O_RDWR | O_CLOEXEC);
if (bar->fd < 0) {
goto fail;
}
diff --git a/src/bfstd.c b/src/bfstd.c
index ce2218c..44eda7c 100644
--- a/src/bfstd.c
+++ b/src/bfstd.c
@@ -184,6 +184,16 @@ char *xgetdelim(FILE *file, char delim) {
}
}
+int open_cterm(int flags) {
+ char path[L_ctermid];
+ if (ctermid(path) == NULL || strlen(path) == 0) {
+ errno = ENOTTY;
+ return -1;
+ }
+
+ return open(path, flags);
+}
+
const char *xgetprogname(void) {
const char *cmd = NULL;
#if BFS_HAS_GETPROGNAME
diff --git a/src/bfstd.h b/src/bfstd.h
index 8055c55..f5d8622 100644
--- a/src/bfstd.h
+++ b/src/bfstd.h
@@ -158,6 +158,16 @@ FILE *xfopen(const char *path, int flags);
*/
char *xgetdelim(FILE *file, char delim);
+/**
+ * Open the controlling terminal.
+ *
+ * @param flags
+ * The open() flags.
+ * @return
+ * An open file descriptor, or -1 on failure.
+ */
+int open_cterm(int flags);
+
// #include <stdlib.h>
/**