misc_filename.c from EmStar at Krugle
Show misc_filename.c syntax highlighted
/*
*
* Copyright (c) 2003 The Regents of the University of California. All
* rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* - Neither the name of the University nor the names of its
* contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/*
* Utility functions for manipulating filenames
*
* part of libmisc
*
* $Id: misc_filename.c,v 1.1 2004/04/17 05:57:57 jelson Exp $
*/
char misc_filename_c_cvsid[] = "$Id: misc_filename.c,v 1.1 2004/04/17 05:57:57 jelson Exp $";
#include <strings.h>
/*
* this EASYBUILD craziness is to break a circular dependency between
* libmisc and easybuild -- I want to use misc_filename as part of
* easybuild, but easybuild is needed to compile libmisc
*/
#ifndef EASYBUILD
#include "misc.h"
#endif
/*
* parses a filename (e.g. "filename.c") into is base ("filename") and
* its extension ("c"). separator character ('.' in this example) is the
* last argument, so the function can be also used to find last
* directory component too by passing '/'.
*
* Base and extension arguments can be NULL if that part of the answer
* isn't needed. If passed, they must be caller-allocated buffers at
* least PATH_MAX in size.
*/
void parse_extension(char *orig_path, char *base, char *extension, char sep)
{
char temp[PATH_MAX], *c;
strncpy(temp, orig_path, sizeof(temp));
if ((c = rindex(temp, sep)) != NULL) {
*c = '\0';
if (base)
snprintf(base, PATH_MAX, "%s", temp);
if (extension)
snprintf(extension, PATH_MAX, "%s", c+1);
} else {
if (base)
snprintf(base, PATH_MAX, "%s", temp);
if (extension)
*extension = '\0';
}
}
See more files for this project here