commit f33dedeeffea3f586aaab79cb69cd650c434119b
parent 13cb187d531ccb1a2eaab00c68743e4d5f009c8e
Author: vx-clutch <[email protected]>
Date: Sun, 10 Aug 2025 17:28:49 -0400
save
Diffstat:
2 files changed, 35 insertions(+), 13 deletions(-)
diff --git a/core/create_project.c b/core/create_project.c
@@ -191,6 +191,7 @@ int setup_git(manifest_t manifest)
if (status) {
printfn("failed on git initialize: %s", strerror(status));
}
+
return status;
}
@@ -238,7 +239,7 @@ int create_configure(manifest_t manifest)
int generate_source_code(manifest_t manifest, char *licence_line)
{
- int status, year;
+ int status, year = 0;
time_t t = time(NULL);
struct tm tm = *localtime(&t);
diff --git a/yait/main.c b/yait/main.c
@@ -32,7 +32,7 @@ usage (int status)
return;
}
- printf ("Usage: yait [OPTION]... PROJECT [NAME]\n");
+ printf ("Usage: yait [OPTION]... <PATH>\n");
printf ("Creates a C project with opinionated defaults.\n");
printf ("When only given the first argument it will detect your name.\n\n");
printf ("Mandatory arguments to long options are mandatory for short options too\n");
@@ -78,6 +78,11 @@ static int parse_arguments(manifest_t *conf, int argc, char **argv)
conf->licence = GPLv3;
else if (strcmp(optarg, "mit") == 0)
conf->licence = MIT;
+ else {
+ fprintf(stderr, "Unknown licence: %s\n",
+ optarg);
+ exit(EXIT_FAILURE);
+ }
break;
case 'L':
ADD_LIBRARY(conf->libraries, TOLibrary(optarg));
@@ -91,11 +96,17 @@ static int parse_arguments(manifest_t *conf, int argc, char **argv)
}
}
- /* now handle positional args */
- if (optind < argc)
- conf->project = argv[optind++];
+ if (optind >= argc) {
+ fprintf(stderr, "Missing required <PATH> argument\n");
+ usage(1);
+ exit(EXIT_FAILURE);
+ }
+
+ conf->project = argv[optind++];
+
if (optind < argc)
conf->name = argv[optind++];
+
return 0;
}
@@ -105,22 +116,24 @@ int get_name(char **output)
char buffer[128];
size_t output_len = 0;
- pipe = popen("ls -l", "r");
+ *output = NULL; // make sure it's NULL before realloc
+
+ pipe = popen("git config user.name", "r");
if (!pipe)
exit(EXIT_FAILURE);
while (fgets(buffer, sizeof(buffer), pipe) != NULL) {
size_t chunk_len = strlen(buffer);
- char *new_output = realloc(output, output_len + chunk_len + 1);
+ char *new_output = realloc(*output, output_len + chunk_len + 1);
if (!new_output) {
- free(output);
+ free(*output);
pclose(pipe);
exit(EXIT_FAILURE);
}
*output = new_output;
- memcpy(output + output_len, buffer, chunk_len);
+ memcpy((*output) + output_len, buffer, chunk_len);
output_len += chunk_len;
- *output[output_len] = '\0';
+ (*output)[output_len] = '\0';
}
pclose(pipe);
return 0;
@@ -143,10 +156,18 @@ int main(int argc, char **argv)
return EXIT_FAILURE;
}
- status = get_name(&manifest.name);
- manifest.path = ".";
+ parse_arguments(&manifest, argc, argv);
- status = create_project(manifest);
+ if (!manifest.name) {
+ status = get_name(&manifest.name);
+ if (status != 0 || !manifest.name || manifest.name[0] == '\0') {
+ fprintf(stderr, "Could not determine user name\n");
+ return EXIT_FAILURE;
+ }
+ }
+
+ manifest.path = manifest.project;
+ status = create_project(manifest);
return status == 0 ? EXIT_SUCCESS : EXIT_FAILURE;
}