#include <h/utils.h>
#define CWD "./"
-#define NCWD (sizeof(CWD) - 1)
#define DOT "."
#define DOTDOT ".."
#define PWD "../"
-#define NPWD (sizeof(PWD) - 1)
static char *pwds;
char *
path(char *name, int flag)
{
- register char *cp, *ep;
+ char *cp, *ep;
if ((cp = expath (name, flag))
&& (ep = cp + strlen (cp) - 1) > cp
static char *
expath (char *name, int flag)
{
- register char *cp, *ep;
+ char *cp, *ep;
char buffer[BUFSIZ];
if (flag == TSUBCWF) {
if (*name == '/'
|| (flag == TFOLDER
- && (strncmp (name, CWD, NCWD)
+ && (!has_prefix(name, CWD)
&& strcmp (name, DOT)
&& strcmp (name, DOTDOT)
- && strncmp (name, PWD, NPWD))))
- return getcpy (name);
+ && !has_prefix(name, PWD))))
+ return mh_xstrdup(name);
if (pwds == NULL)
pwds = pwd ();
if (strcmp (name, DOT) == 0 || strcmp (name, CWD) == 0)
- return getcpy (pwds);
+ return mh_xstrdup(pwds);
ep = pwds + strlen (pwds);
if ((cp = strrchr(pwds, '/')) == NULL)
if (cp == pwds)
cp++;
- if (strncmp (name, CWD, NCWD) == 0)
- name += NCWD;
+ if (has_prefix(name, CWD))
+ name += LEN(CWD);
if (strcmp (name, DOTDOT) == 0 || strcmp (name, PWD) == 0) {
snprintf (buffer, sizeof(buffer), "%.*s", (int)(cp - pwds), pwds);
- return getcpy (buffer);
+ return mh_xstrdup(buffer);
}
- if (strncmp (name, PWD, NPWD) == 0)
- name += NPWD;
+ if (has_prefix(name, PWD))
+ name += LEN(PWD);
else
cp = ep;
snprintf (buffer, sizeof(buffer), "%.*s/%s", (int)(cp - pwds), pwds, name);
- return getcpy (buffer);
+ return mh_xstrdup(buffer);
}
static void
compath (char *f)
{
- register char *cp, *dp;
+ char *cp, *dp;
if (*f != '/')
return;
*cp = '\0';
break;
}
- if (strncmp (cp, PWD, NPWD) == 0) {
+ if (has_prefix(cp, PWD)) {
for (dp = cp - 2; dp > f; dp--)
if (*dp == '/')
break;
if (dp <= f)
dp = f;
- strcpy (dp, cp + NPWD - 1);
+ strcpy (dp, cp + LEN(PWD) - 1);
cp = dp;
continue;
}
- if (strncmp (cp, CWD, NCWD) == 0) {
- strcpy (cp - 1, cp + NCWD - 1);
+ if (has_prefix(cp, CWD)) {
+ strcpy (cp - 1, cp + LEN(CWD) - 1);
cp--;
continue;
}