use getopt for args

This commit is contained in:
phixxy 2026-03-21 00:57:28 -07:00
parent 45c48a4941
commit 7989f0d9ca

View file

@ -10,7 +10,7 @@ struct Flags
{ {
int use_v; int use_v;
int use_s; int use_s;
char suffix[255]; char *suffix;
char skratch_path[4096]; char skratch_path[4096];
char file_path[4096]; char file_path[4096];
char filename[255]; char filename[255];
@ -36,7 +36,7 @@ int make_skratch_file(struct Flags *f)
char fp[4096]; char fp[4096];
int fd = 0; int fd = 0;
snprintf(fp, sizeof(fp), "%s/%s", f->skratch_path, f->filename); snprintf(fp, sizeof(fp), "%s/%s", f->skratch_path, f->filename);
if (!strcmp(f->filename, "skratchXXXXXX")) if (!strcmp(f->filename, "skratch-XXXXXX"))
{ {
fd = mkstemp(fp); fd = mkstemp(fp);
close(fd); close(fd);
@ -114,46 +114,40 @@ int delete_files(struct Flags *f)
int main(int argc, char *argv[]) int main(int argc, char *argv[])
{ {
int delete = 0; int opt;
struct Flags f = {.use_v = 0, .filename="skratchXXXXXX"}; struct Flags f = {.use_v = 0, .filename="skratch-XXXXXX"};
make_skratch_path(&f); make_skratch_path(&f);
while ((opt = getopt(argc, argv, "cls:v")) != -1)
char arg;
for (int i = 1; i < argc; i++)
{ {
if (argv[i][0] == '-' && strlen(argv[i]) == 2) switch (opt)
{
arg = argv[i][1];
}
else
{
//set filename
if (!strcmp(f.filename,"skratchXXXXXX"))
{
strcpy(f.filename, argv[i]);
continue;
}
else
{
printf("INVALID ARGUMENT: %s\n", argv[i]);
return 4;
}
}
switch (arg)
{ {
case 'c': case 'c':
delete_files(&f); delete_files(&f);
return 0; return 0;
case 'l': case 'l':
list_files(&f, delete); list_files(&f, 0);
return 0; return 0;
case 's':
f.use_s = 1;
f.suffix = optarg;
break;
case 'v': case 'v':
f.use_v = 1; f.use_v = 1;
break; break;
default: default:
printf("Unknown Arg %c",arg); printf("error print usage");
return 5; }
}
for (int i = optind; i < argc; i++)
{
if (!strcmp(f.filename,"skratch-XXXXXX"))
{
strcpy(f.filename, argv[i]);
}
else
{
printf("ERROR: Too many file args");
return 1;
} }
} }
set_editor(&f); set_editor(&f);
@ -162,5 +156,6 @@ int main(int argc, char *argv[])
args[0] = f.editor; args[0] = f.editor;
args[1] = f.file_path; args[1] = f.file_path;
args[2] = NULL; args[2] = NULL;
execvp(f.editor,args); execvp(f.editor, args);
return 0;
} }