diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2023-11-20 10:05:48 -0500 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2023-11-20 10:05:48 -0500 |
commit | 243d8540b3869f9ace2baf8b00f9cb86e8d84d52 (patch) | |
tree | dbb3566b4d1e750008ba40c0800d9bd55a9774cc /src/utils.c | |
parent | d377b6fd45fbffe3d57ce3486853938e45bebaf4 (diff) | |
download | stasis-243d8540b3869f9ace2baf8b00f9cb86e8d84d52.tar.gz |
Fix warnings and add xmkstemp
* Reduce stack usage for status variable in msg()
* Bugfix: write OMC_COLOR_RESET to the requested stream instead of stdout
* Add helper function xmkstemp to avoid clutter when using disposable files
Diffstat (limited to 'src/utils.c')
-rw-r--r-- | src/utils.c | 27 |
1 files changed, 21 insertions, 6 deletions
diff --git a/src/utils.c b/src/utils.c index 417b0cc..802d397 100644 --- a/src/utils.c +++ b/src/utils.c @@ -4,8 +4,9 @@ extern struct OMC_GLOBAL globals; char *dirstack[1024]; -const size_t dirstack_max = sizeof(dirstack) / sizeof(dirstack[0]); -size_t dirstack_len = 0; +const ssize_t dirstack_max = sizeof(dirstack) / sizeof(dirstack[0]); +ssize_t dirstack_len = 0; + int pushd(const char *path) { if (dirstack_len + 1 > dirstack_max) { return -1; @@ -309,7 +310,6 @@ int touch(const char *filename) { perror(filename); return 1; } - fprintf(stderr, ""); fclose(fp); return 0; } @@ -375,7 +375,7 @@ char *git_describe(const char *path) { void msg(unsigned type, char *fmt, ...) { FILE *stream = NULL; char header[255]; - char status[255]; + char status[20]; if (type & OMC_MSG_NOP) { // quiet mode @@ -418,8 +418,7 @@ void msg(unsigned type, char *fmt, ...) { fprintf(stream, "%s", header); vfprintf(stream, fmt, args); - printf("%s", OMC_COLOR_RESET); - printf("%s", OMC_COLOR_RESET); + fprintf(stream, "%s", OMC_COLOR_RESET); va_end(args); } @@ -429,3 +428,19 @@ void debug_shell() { msg(OMC_MSG_L1 | OMC_MSG_WARN, "EXITING OMC DEBUG SHELL\n" OMC_COLOR_RESET); exit(255); } + +char *xmkstemp(FILE **fp) { + char t_name[PATH_MAX]; + strcpy(t_name, "/tmp/OMC.XXXXXX"); + int fd = mkstemp(t_name); + + *fp = fdopen(fd, "w"); + if (!*fp) { + if (fd > 0) + close(fd); + *fp = NULL; + return NULL; + } + char *path = strdup(t_name); + return path; +}
\ No newline at end of file |