#49: I found one memory overflow and memory leak in "ln" applet. Last patch reduced also 54 bytes. ;) #50: I found bug in loginutils/Makefile.in. New patch have also new function to libbb and aplied this to applets and other cosmetic changes.
This commit is contained in:
parent
88947dd05e
commit
d378c3149c
18 changed files with 64 additions and 79 deletions
|
@ -43,45 +43,47 @@ static int fs_link(const char *link_destname, const char *link_srcname,
|
|||
{
|
||||
int status;
|
||||
int src_is_dir;
|
||||
char *src_name;
|
||||
char *src_name = 0;
|
||||
const char *src;
|
||||
|
||||
if (link_destname==NULL)
|
||||
return(FALSE);
|
||||
|
||||
src_name = (char *) xmalloc(strlen(link_srcname)+strlen(link_destname)+1);
|
||||
|
||||
if (link_srcname==NULL)
|
||||
strcpy(src_name, link_destname);
|
||||
src = link_destname;
|
||||
else
|
||||
strcpy(src_name, link_srcname);
|
||||
src = link_srcname;
|
||||
|
||||
if (flag&LN_NODEREFERENCE)
|
||||
src_is_dir = is_directory(src_name, TRUE, NULL);
|
||||
src_is_dir = is_directory(src, TRUE, NULL);
|
||||
else
|
||||
src_is_dir = is_directory(src_name, FALSE, NULL);
|
||||
src_is_dir = is_directory(src, FALSE, NULL);
|
||||
|
||||
if ((src_is_dir==TRUE)&&((flag&LN_NODEREFERENCE)==0)) {
|
||||
char* srcdir_name;
|
||||
|
||||
srcdir_name = xstrdup(link_destname);
|
||||
strcat(src_name, "/");
|
||||
strcat(src_name, get_last_path_component(srcdir_name));
|
||||
src_name = concat_path_file(src, get_last_path_component(srcdir_name));
|
||||
src = src_name;
|
||||
free(srcdir_name);
|
||||
}
|
||||
|
||||
if (flag&LN_FORCE)
|
||||
unlink(src_name);
|
||||
unlink(src);
|
||||
|
||||
if (flag&LN_SYMLINK)
|
||||
status = symlink(link_destname, src_name);
|
||||
status = symlink(link_destname, src);
|
||||
else
|
||||
status = link(link_destname, src_name);
|
||||
status = link(link_destname, src);
|
||||
|
||||
if (status != 0) {
|
||||
perror_msg(src_name);
|
||||
return(FALSE);
|
||||
perror_msg(src);
|
||||
status = FALSE;
|
||||
} else {
|
||||
status = TRUE;
|
||||
}
|
||||
return(TRUE);
|
||||
free(src_name);
|
||||
return status;
|
||||
}
|
||||
|
||||
extern int ln_main(int argc, char **argv)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue