ascii-chat 0.11.33
Video chat in your terminal
Loading...
Searching...
No Matches
homedir.c
Go to the documentation of this file.
1
8#include <ascii-chat/common.h>
11#include <string.h>
12#include <stdlib.h>
13
21
24 if (!homedir) {
25 log_error("Failed to allocate memory for GPG homedir handle");
26 return NULL;
27 }
28
29 /* Create temporary directory using platform abstraction */
30 if (platform_mkdtemp(homedir->path, sizeof(homedir->path), "ascii-chat-gpg") != 0) {
31 log_error("Failed to create temporary GPG homedir");
32 SAFE_FREE(homedir);
33 return NULL;
34 }
35
36 /* Restrict permissions to owner only (mode 0700) using platform abstraction */
37 if (platform_chmod(homedir->path, 0700) != 0) {
38 log_warn("Failed to set permissions on GPG homedir, attempting cleanup");
39 platform_rmdir_recursive(homedir->path);
40 SAFE_FREE(homedir);
41 return NULL;
42 }
43
44 log_debug("Created temporary GPG homedir: %s", homedir->path);
45 return homedir;
46}
47
48const char *gpg_homedir_path(const gpg_homedir_t *homedir) {
49 if (!homedir) {
50 return NULL;
51 }
52 return homedir->path;
53}
54
56 if (!homedir) {
57 return;
58 }
59
60 /* Recursively delete the entire directory and all contents using platform abstraction */
61 if (platform_rmdir_recursive(homedir->path) != 0) {
62 log_warn("Failed to completely clean up GPG homedir: %s", homedir->path);
63 } else {
64 log_debug("Cleaned up temporary GPG homedir: %s", homedir->path);
65 }
66
67 SAFE_FREE(homedir);
68}
⚙️ Common definitions, error codes, macros, and types shared throughout the application
Cross-platform filesystem operations.
#define SAFE_FREE(ptr)
Definition common.h:376
#define SAFE_MALLOC(size, cast)
Definition common.h:264
#define log_warn(...)
Log a WARN message.
Definition log/log.h:574
#define log_error(...)
Log an ERROR message.
Definition log/log.h:587
#define log_debug(...)
Log a DEBUG message.
Definition log/log.h:548
int platform_chmod(const char *pathname, int mode)
Change file permissions/mode.
asciichat_error_t platform_rmdir_recursive(const char *path)
Recursively delete a directory and all its contents.
asciichat_error_t platform_mkdtemp(char *path_out, size_t path_size, const char *prefix)
Create a temporary directory with a given prefix.
const char * gpg_homedir_path(const gpg_homedir_t *homedir)
Get the homedir path for use in GPG commands.
Definition homedir.c:48
void gpg_homedir_destroy(gpg_homedir_t *homedir)
Destroy a temporary GPG homedir and clean up all files.
Definition homedir.c:55
gpg_homedir_t * gpg_homedir_create(void)
Create a temporary GPG homedir for isolated key operations.
Definition homedir.c:22
Temporary GPG homedir management for isolated key operations.
📝 Logging API with multiple log levels and terminal output control
Opaque handle to a temporary GPG homedir.
Internal structure for temporary GPG homedir.
Definition homedir.c:18
char path[PLATFORM_MAX_PATH_LENGTH]
Definition homedir.c:19
#define PLATFORM_MAX_PATH_LENGTH
Definition system.c:69