[PATCH] strlcat: use for uml umid.c
authorPaolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Fri, 23 Sep 2005 04:44:14 +0000 (21:44 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 23 Sep 2005 05:17:36 +0000 (22:17 -0700)
Simplify the code by using strlcat() instead of strncat() and manual
appending.

Signed-off-by: Paolo 'Blaisorblade' Giarrusso <blaisorblade@yahoo.it>
Cc: Jeff Dike <jdike@addtoit.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/um/include/user.h
arch/um/kernel/umid.c

index 57ee9e2..0f865ef 100644 (file)
@@ -14,7 +14,9 @@ extern void *um_kmalloc_atomic(int size);
 extern void kfree(void *ptr);
 extern int in_aton(char *str);
 extern int open_gdb_chan(void);
-extern int strlcpy(char *, const char *, int);
+/* These use size_t, however unsigned long is correct on both i386 and x86_64. */
+extern unsigned long strlcpy(char *, const char *, unsigned long);
+extern unsigned long strlcat(char *, const char *, unsigned long);
 extern void *um_vmalloc(int size);
 extern void vfree(void *ptr);
 
index 251d277..0b21d59 100644 (file)
@@ -237,16 +237,13 @@ static int __init make_uml_dir(void)
                strlcpy(dir, home, sizeof(dir));
                uml_dir++;
        }
+       strlcat(dir, uml_dir, sizeof(dir));
        len = strlen(dir);
-       strncat(dir, uml_dir, sizeof(dir) - len);
-       len = strlen(dir);
-       if((len > 0) && (len < sizeof(dir) - 1) && (dir[len - 1] != '/')){
-               dir[len] = '/';
-               dir[len + 1] = '\0';
-       }
+       if (len > 0 && dir[len - 1] != '/')
+               strlcat(dir, "/", sizeof(dir));
 
        uml_dir = malloc(strlen(dir) + 1);
-       if(uml_dir == NULL){
+       if (uml_dir == NULL) {
                printf("make_uml_dir : malloc failed, errno = %d\n", errno);
                exit(1);
        }