diff options
Diffstat (limited to 'src/cmd/pwd')
| -rwxr-xr-x | src/cmd/pwd/makefile | 12 | ||||
| -rwxr-xr-x | src/cmd/pwd/pwd.c | 30 |
2 files changed, 42 insertions, 0 deletions
diff --git a/src/cmd/pwd/makefile b/src/cmd/pwd/makefile new file mode 100755 index 0000000..85f4d06 --- /dev/null +++ b/src/cmd/pwd/makefile @@ -0,0 +1,12 @@ +CFLAGS=-Wall -Werror + +build: pwd + @cp pwd $(PROROOT)/build/bin/pwd + +pwd: pwd.c + $(CC) $(CFLAGS) -o pwd pwd.c + +clean: + @rm -r pwd + +.PHONY: build clean diff --git a/src/cmd/pwd/pwd.c b/src/cmd/pwd/pwd.c new file mode 100755 index 0000000..d8c4c2a --- /dev/null +++ b/src/cmd/pwd/pwd.c @@ -0,0 +1,30 @@ +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <errno.h> + +#define MAXLEN 1024 + +/* print the current working directory */ +int main(void) +{ + char *cwd, i = 1; + + do { + size_t size = i * MAXLEN; + cwd = (char *)malloc(size); + getcwd(cwd, size); + if (errno == ERANGE) + free((void *)cwd); + } while (errno == ERANGE && ++i < 10); + + if (errno == ERANGE) { + fprintf(stderr, "pwd: directory name is too large\n"); + return -1; + } + + printf("%s\n", cwd); + free((void *)cwd); + return 0; +} + |
