RTPathFilename.cpp revision 210e87cc03f92d54681b81a81cc1fdbd48a9d2c8
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync/* $Id$ */
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync/** @file
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * IPRT - RTPathFilename
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync */
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync/*
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync * Copyright (C) 2006-2007 Oracle Corporation
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync *
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * available from http://www.virtualbox.org. This file is free software;
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * you can redistribute it and/or modify it under the terms of the GNU
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * General Public License (GPL) as published by the Free Software
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync *
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * The contents of this file may alternatively be used under the terms
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * of the Common Development and Distribution License Version 1.0
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * VirtualBox OSE distribution, in which case the provisions of the
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * CDDL are applicable instead of those of the GPL.
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync *
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * You may elect to license modified versions of this file under the
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * terms and conditions of either the GPL or the CDDL or both.
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync */
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync/*******************************************************************************
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync* Header Files *
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync*******************************************************************************/
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync#include "internal/iprt.h"
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync#include <iprt/path.h>
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync#include <iprt/string.h>
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync/**
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * Finds the filename in a path.
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync *
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync * @returns Pointer to filename within pszPath.
4b0877844a82ab93a2ce6f90bbd6d581b175602bvboxsync * @returns NULL if no filename (i.e. empty string or ends with a slash).
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync * @param pszPath Path to find filename in.
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync */
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsyncRTDECL(char *) RTPathFilename(const char *pszPath)
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync{
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync const char *psz = pszPath;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync const char *pszName = pszPath;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync for (;; psz++)
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync {
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync switch (*psz)
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync {
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync /* handle separators. */
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync#if defined(RT_OS_WINDOWS) || defined(RT_OS_OS2)
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync case ':':
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync pszName = psz + 1;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync break;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync case '\\':
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync#endif
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync case '/':
e00b7e275dee70ffbd9e00a3e3e3e8513287e2b2vboxsync pszName = psz + 1;
e00b7e275dee70ffbd9e00a3e3e3e8513287e2b2vboxsync break;
e00b7e275dee70ffbd9e00a3e3e3e8513287e2b2vboxsync
e00b7e275dee70ffbd9e00a3e3e3e8513287e2b2vboxsync /* the end */
e00b7e275dee70ffbd9e00a3e3e3e8513287e2b2vboxsync case '\0':
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync if (*pszName)
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync return (char *)(void *)pszName;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync return NULL;
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync }
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync }
e6166c67ca2d86723542b7f5e373820808a0ff6fvboxsync
f29e5c613cf030c9e141a0cb0d77d4185eb409aavboxsync /* not reached */
f29e5c613cf030c9e141a0cb0d77d4185eb409aavboxsync}
f29e5c613cf030c9e141a0cb0d77d4185eb409aavboxsync
f29e5c613cf030c9e141a0cb0d77d4185eb409aavboxsync