From 583c79cb285bac3672846a37c2f8485c23d45077 Mon Sep 17 00:00:00 2001 From: Alan Cox Date: Wed, 20 May 2015 23:29:54 +0100 Subject: [PATCH] ln: fix buffer checks, remove stdio, shrink Lots more memory saved --- Applications/util/ln.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/Applications/util/ln.c b/Applications/util/ln.c index 01b2b16a..3a5cbdb4 100644 --- a/Applications/util/ln.c +++ b/Applications/util/ln.c @@ -17,6 +17,10 @@ #define PATHLEN 512 +static void writes(int fd, const char *s) +{ + write(fd, s, strlen(s)); +} /* * Return TRUE if name is a directory. @@ -45,17 +49,16 @@ char *buildname(char *dirname, char *filename) char *cp; static char buf[PATHLEN]; - if ((dirname == NULL) || (*dirname == '\0')) + if (dirname == NULL || *dirname == '\0') return filename; cp = strrchr(filename, '/'); if (cp) filename = cp + 1; - /* FIXME: overflow check */ - strcpy(buf, dirname); - strcat(buf, "/"); - strcat(buf, filename); + strlcpy(buf, dirname, PATHLEN); + strlcat(buf, "/", PATHLEN); + strlcat(buf, filename, PATHLEN); return buf; } @@ -72,7 +75,8 @@ int main(int argc, char *argv[]) #if defined(S_ISLNK) && 0 /* FIXME */ if (strcmp(argv[1], "-s") == 0) { if (argc != 4) { - fprintf(stderr, "%s: wrong number of arguments for symbolic link\n", argv[0]); + writes(2, argv[0]); + writes(2, ": wrong number of arguments for symbolic link\n"); return 1; } @@ -84,7 +88,10 @@ int main(int argc, char *argv[]) } #endif - fprintf(stderr, "%s: unknown option %s\n", argv[0], argv[1]); + writes(2, argv[0]); + writes(2, ": unknown option "); + writes(2, argv[1]); + write(2, "\n", 1); return 1; } @@ -94,7 +101,8 @@ int main(int argc, char *argv[]) dirflag = isadir(lastarg); if ((argc > 3) && !dirflag) { - fprintf(stderr, "%s: not a directory\n", lastarg); + writes(2, lastarg); + writes(2, ": not a directory\n"); return 1; } -- 2.34.1