busybox/libbb/get_last_path_component.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * bb_get_last_path_component implementation for busybox
   4 *
   5 * Copyright (C) 2001  Manuel Novoa III  <mjn3@codepoet.org>
   6 *
   7 * Licensed under GPLv2 or later, see file LICENSE in this source tree.
   8 */
   9#include "libbb.h"
  10
  11const char* FAST_FUNC bb_basename(const char *name)
  12{
  13        const char *cp = strrchr(name, '/');
  14        if (cp)
  15                return cp + 1;
  16        return name;
  17}
  18
  19/*
  20 * "/"        -> "/"
  21 * "abc"      -> "abc"
  22 * "abc/def"  -> "def"
  23 * "abc/def/" -> ""
  24 */
  25char* FAST_FUNC bb_get_last_path_component_nostrip(const char *path)
  26{
  27        char *slash = strrchr(path, '/');
  28
  29        if (!slash || (slash == path && !slash[1]))
  30                return (char*)path;
  31
  32        return slash + 1;
  33}
  34
  35/*
  36 * "/"        -> "/"
  37 * "abc"      -> "abc"
  38 * "abc/def"  -> "def"
  39 * "abc/def/" -> "def" !!
  40 */
  41char* FAST_FUNC bb_get_last_path_component_strip(char *path)
  42{
  43        char *slash = last_char_is(path, '/');
  44
  45        if (slash)
  46                while (*slash == '/' && slash != path)
  47                        *slash-- = '\0';
  48
  49        return bb_get_last_path_component_nostrip(path);
  50}
  51