add lib and try to improve ft_printf
This commit is contained in:
parent
ad626f4c54
commit
06c2a30cf1
2
Makefile
2
Makefile
|
@ -2,7 +2,7 @@ CC := gcc
|
|||
LD := $(CC)
|
||||
LDFLAGS :=
|
||||
CFLAGS := $(shell cat compile_flags.txt | sed -z "s/\n/ /g")
|
||||
SRC := $(wildcard src/*.c)
|
||||
SRC := $(wildcard src/*.c lib/**/*.c)
|
||||
OBJ_DIR := build
|
||||
OBJ := $(addprefix $(OBJ_DIR)/, $(patsubst %.c,%.o,$(SRC)))
|
||||
DIR := .
|
||||
|
|
|
@ -1,6 +1,9 @@
|
|||
-includeinc/main.h
|
||||
-includelib/libft/libft.h
|
||||
-includelib/ft_printf/ft_printf.h
|
||||
-Wall
|
||||
-Wextra
|
||||
-std=c23
|
||||
-iquoteinc
|
||||
-iquotelib
|
||||
-g
|
||||
|
|
18
inc/main.h
18
inc/main.h
|
@ -1,11 +1,15 @@
|
|||
#pragma once
|
||||
|
||||
typedef struct flags {
|
||||
bool l;
|
||||
bool a;
|
||||
bool R;
|
||||
bool r;
|
||||
bool t;
|
||||
#include <inttypes.h>
|
||||
|
||||
typedef struct {
|
||||
i64 l;
|
||||
i64 a;
|
||||
i64 R;
|
||||
i64 r;
|
||||
i64 t;
|
||||
int error[2];
|
||||
} flags_t;
|
||||
|
||||
flags_t get_flags(char **argv);
|
||||
flags_t *get_flags(char **argv);
|
||||
void display_flags(flags_t flags);
|
||||
|
|
1
lib/ft_printf
Submodule
1
lib/ft_printf
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit b7b7d5aa04fea13f5da4e4ffb00beb4f5724e3cd
|
1
lib/libft
Submodule
1
lib/libft
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit a020fd795c3dc0a34a59d2906908202cde3d3ccf
|
32
src/flags.c
32
src/flags.c
|
@ -1,6 +1,34 @@
|
|||
flags_t get_flags(char **argv) {
|
||||
flags_t *get_flags(char **argv) {
|
||||
flags_t *flags = ft_calloc(1, sizeof(flags_t));
|
||||
if (flags == nullptr)
|
||||
return nullptr;
|
||||
flags->t = 0;
|
||||
flags->error[0] = -1;
|
||||
|
||||
flags_t flags = {false, false, false, false, false};
|
||||
for (int i = 1; argv[i] != NULL; i++)
|
||||
if (argv[i][0] == '-')
|
||||
for (int j = 1; argv[i][j] != '\0'; j++) {
|
||||
if (argv[i][j] == 'l')
|
||||
flags->l = 1;
|
||||
else if (argv[i][j] == 'a')
|
||||
flags->a = 1;
|
||||
else if (argv[i][j] == 'R')
|
||||
flags->R = 1;
|
||||
else if (argv[i][j] == 'r')
|
||||
flags->r = 1;
|
||||
else if (argv[i][j] == 't')
|
||||
flags->t = 1;
|
||||
else {
|
||||
flags->error[0] = i;
|
||||
flags->error[1] = j;
|
||||
return flags;
|
||||
}
|
||||
}
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
||||
void display_flags(flags_t flags) {
|
||||
ft_printf("l: %d; a: %d; R: %d; r: %d; t: %d\n",
|
||||
flags.l, flags.a, flags.R, flags.r, flags.t);
|
||||
}
|
||||
|
|
|
@ -3,6 +3,13 @@ int main(int argc, char **argv) {
|
|||
if (argc < 2)
|
||||
return 1;
|
||||
|
||||
get_flags(argv);
|
||||
flags_t *flags = get_flags(argv);
|
||||
if (flags->error[0] != -1) {
|
||||
ft_printf_fd(2, "ls: invalid line width: \'%s\'",
|
||||
argv[flags->error[0]][flags->error[1]]);
|
||||
return 2;
|
||||
}
|
||||
display_flags(*flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue