forked from luck/tmp_suning_uos_patched
[PATCH] uml: fix big stack user
Switch this proc from storing 4k of data (a whole path) on the stack to keeping it on the heap. Maybe it's not called in process context but only in early boot context (where in UML you have a normal process stack on the host) but just to be safe, fix it. While at it some little readability simplifications. 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>
This commit is contained in:
parent
d84a19ce52
commit
87276f721a
@ -53,33 +53,36 @@ static void __init find_tempdir(void)
|
||||
*/
|
||||
int make_tempfile(const char *template, char **out_tempname, int do_unlink)
|
||||
{
|
||||
char tempname[MAXPATHLEN];
|
||||
char *tempname;
|
||||
int fd;
|
||||
|
||||
tempname = malloc(MAXPATHLEN);
|
||||
|
||||
find_tempdir();
|
||||
if (*template != '/')
|
||||
if (template[0] != '/')
|
||||
strcpy(tempname, tempdir);
|
||||
else
|
||||
*tempname = 0;
|
||||
tempname[0] = '\0';
|
||||
strcat(tempname, template);
|
||||
fd = mkstemp(tempname);
|
||||
if(fd < 0){
|
||||
fprintf(stderr, "open - cannot create %s: %s\n", tempname,
|
||||
strerror(errno));
|
||||
return -1;
|
||||
goto out;
|
||||
}
|
||||
if(do_unlink && (unlink(tempname) < 0)){
|
||||
perror("unlink");
|
||||
return -1;
|
||||
goto out;
|
||||
}
|
||||
if(out_tempname){
|
||||
*out_tempname = strdup(tempname);
|
||||
if(*out_tempname == NULL){
|
||||
perror("strdup");
|
||||
return -1;
|
||||
}
|
||||
*out_tempname = tempname;
|
||||
} else {
|
||||
free(tempname);
|
||||
}
|
||||
return(fd);
|
||||
out:
|
||||
free(tempname);
|
||||
return -1;
|
||||
}
|
||||
|
||||
#define TEMPNAME_TEMPLATE "vm_file-XXXXXX"
|
||||
|
Loading…
Reference in New Issue
Block a user