Applied vodz' patches #49 and #50 (with a small correction in runshell.c)

#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:
Robert Griebl 2002-07-19 00:05:54 +00:00
parent 88947dd05e
commit d378c3149c
18 changed files with 64 additions and 79 deletions

View file

@ -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)