0b4551faf5
Howdy, Bug #1006 reports that ln -s /tmp/foo . does not work correctly. In fact, it appears that any instantiation of ln -s FILE... DIRECTORY does not work. The following patch adds support for this form, which then fixes the particular instance noted in the bug report. In the process, I needed the basename function. This appears in the string.h provided by glibc, but not uC-libc. So I wrote my own to go in utility.c, called get_last_path_component. I also modified the basename utility to use this function. At some point it might be desirous to use the basename from the library if it exists, and otherwise compile our own. But I don't know how to do this. Matt
58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
/* vi: set sw=4 ts=4: */
|
|
/*
|
|
* Mini basename implementation for busybox
|
|
*
|
|
* Copyright (C) 1999,2000 by Lineo, inc.
|
|
* Written by Erik Andersen <andersen@lineo.com>, <andersee@debian.org>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*
|
|
*/
|
|
|
|
#include "internal.h"
|
|
#include <stdio.h>
|
|
|
|
const char *basename_usage="basename FILE [SUFFIX]\n"
|
|
#ifndef BB_FEATURE_TRIVIAL_HELP
|
|
"\nStrips directory path and suffixes from FILE.\n"
|
|
"If specified, also removes any trailing SUFFIX.\n"
|
|
#endif
|
|
;
|
|
|
|
|
|
extern int basename_main(int argc, char **argv)
|
|
{
|
|
int m, n;
|
|
char *s, *s1;
|
|
|
|
if ((argc < 2) || (**(argv + 1) == '-')) {
|
|
usage(basename_usage);
|
|
}
|
|
|
|
argv++;
|
|
|
|
s = get_last_path_component(*argv);
|
|
|
|
if (argc>2) {
|
|
argv++;
|
|
n = strlen(*argv);
|
|
m = strlen(s);
|
|
if (m>=n && strncmp(s+m-n, *argv, n)==0)
|
|
s[m-n] = '\0';
|
|
}
|
|
printf("%s\n", s);
|
|
return(TRUE);
|
|
}
|