* path.cc (basename): Return pointer into the path argument itself.
Shrink buf to 4 bytes. Use buf only for border cases. (dirname): Ditto.
This commit is contained in:
parent
044b62c767
commit
2da0e37519
|
@ -1,3 +1,9 @@
|
||||||
|
2007-10-11 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
|
* path.cc (basename): Return pointer into the path argument itself.
|
||||||
|
Shrink buf to 4 bytes. Use buf only for border cases.
|
||||||
|
(dirname): Ditto.
|
||||||
|
|
||||||
2007-10-10 Corinna Vinschen <corinna@vinschen.de>
|
2007-10-10 Corinna Vinschen <corinna@vinschen.de>
|
||||||
|
|
||||||
* path.cc (struct symlink_info): Change size of contents member to
|
* path.cc (struct symlink_info): Change size of contents member to
|
||||||
|
|
|
@ -4694,15 +4694,14 @@ etc::file_changed (int n)
|
||||||
extern "C" char *
|
extern "C" char *
|
||||||
basename (char *path)
|
basename (char *path)
|
||||||
{
|
{
|
||||||
static char buf[CYG_MAX_PATH];
|
static char buf[4];
|
||||||
char *c, *d, *bs = buf;
|
char *c, *d, *bs = path;
|
||||||
|
|
||||||
if (!path || !*path)
|
if (!path || !*path)
|
||||||
return strcpy (buf, ".");
|
return strcpy (buf, ".");
|
||||||
strncpy (buf, path, CYG_MAX_PATH);
|
if (isalpha (path[0]) && path[1] == ':')
|
||||||
if (isalpha (buf[0]) && buf[1] == ':')
|
|
||||||
bs += 2;
|
bs += 2;
|
||||||
else if (strspn (buf, "/\\") > 1)
|
else if (strspn (path, "/\\") > 1)
|
||||||
++bs;
|
++bs;
|
||||||
c = strrchr (bs, '/');
|
c = strrchr (bs, '/');
|
||||||
if ((d = strrchr (c ?: bs, '\\')) > c)
|
if ((d = strrchr (c ?: bs, '\\')) > c)
|
||||||
|
@ -4720,9 +4719,13 @@ basename (char *path)
|
||||||
if (c && (c > bs || c[1]))
|
if (c && (c > bs || c[1]))
|
||||||
return c + 1;
|
return c + 1;
|
||||||
}
|
}
|
||||||
else if (!bs[0])
|
else if (!bs[0])
|
||||||
strcpy (bs, ".");
|
{
|
||||||
return buf;
|
stpncpy (buf, path, bs - path);
|
||||||
|
stpcpy (buf + (bs - path), ".");
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* No need to be reentrant or thread-safe according to SUSv3.
|
/* No need to be reentrant or thread-safe according to SUSv3.
|
||||||
|
@ -4732,15 +4735,14 @@ basename (char *path)
|
||||||
extern "C" char *
|
extern "C" char *
|
||||||
dirname (char *path)
|
dirname (char *path)
|
||||||
{
|
{
|
||||||
static char buf[CYG_MAX_PATH];
|
static char buf[4];
|
||||||
char *c, *d, *bs = buf;
|
char *c, *d, *bs = path;
|
||||||
|
|
||||||
if (!path || !*path)
|
if (!path || !*path)
|
||||||
return strcpy (buf, ".");
|
return strcpy (buf, ".");
|
||||||
strncpy (buf, path, CYG_MAX_PATH);
|
if (isalpha (path[0]) && path[1] == ':')
|
||||||
if (isalpha (buf[0]) && buf[1] == ':')
|
|
||||||
bs += 2;
|
bs += 2;
|
||||||
else if (strspn (buf, "/\\") > 1)
|
else if (strspn (path, "/\\") > 1)
|
||||||
++bs;
|
++bs;
|
||||||
c = strrchr (bs, '/');
|
c = strrchr (bs, '/');
|
||||||
if ((d = strrchr (c ?: bs, '\\')) > c)
|
if ((d = strrchr (c ?: bs, '\\')) > c)
|
||||||
|
@ -4767,6 +4769,10 @@ dirname (char *path)
|
||||||
c[1] = '\0';
|
c[1] = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
strcpy (bs, ".");
|
{
|
||||||
return buf;
|
stpncpy (buf, path, bs - path);
|
||||||
|
stpcpy (buf + (bs - path), ".");
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
return path;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue