summaryrefslogtreecommitdiff
path: root/components/cat.c
diff options
context:
space:
mode:
authordrkhsh <me@drkhsh.at>2022-11-23 23:59:51 +0100
committerRafael Marçalo <raroma09@gmail.com>2022-11-24 17:47:41 +0000
commit2fc29dbd3da312f6c3de2e75e8f7363235b0795d (patch)
treeb48e7e6444ee78d68a0994389a3709027019ec26 /components/cat.c
parent3124351099e0be9ba4a00e79083457159f651372 (diff)
New component: cat
Generically reads an arbitrary file natively. Saves a few layers of execution in comparison to using `run_command` with an argument like `cat ./file`.
Diffstat (limited to 'components/cat.c')
-rw-r--r--components/cat.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/components/cat.c b/components/cat.c
new file mode 100644
index 0000000..07944cc
--- /dev/null
+++ b/components/cat.c
@@ -0,0 +1,32 @@
+/* See LICENSE file for copyright and license details. */
+#include <stdio.h>
+#include <string.h>
+
+#include "../slstatus.h"
+#include "../util.h"
+
+const char *
+cat(const char *path)
+{
+ char *f;
+ FILE *fp;
+
+ if (!(fp = fopen(path, "r"))) {
+ warn("fopen '%s':", path);
+ return NULL;
+ }
+
+ f = fgets(buf, sizeof(buf) - 1, fp);
+ if (fclose(fp) < 0) {
+ warn("fclose '%s':", path);
+ return NULL;
+ }
+ if (!f)
+ return NULL;
+
+ if ((f = strrchr(buf, '\n')))
+ f[0] = '\0';
+
+ return buf[0] ? buf : NULL;
+}
+