From: Peter Johnson Date: Tue, 28 Mar 2006 02:20:28 +0000 (-0000) Subject: In preparation for more file handling functions to get moved to libyasm, X-Git-Tag: v0.5.0rc2~5^2~9 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1f1642f284dc985cb6d2186343781cc2908f4847;p=yasm In preparation for more file handling functions to get moved to libyasm, merge splitpath functions into file.c/h. * splitpath.c: Remove, moving functions to * file.c: Here. * coretype.h: Move splitpath prototypes to * file.h: Here. * libyasm/Makefile.inc: Update to remove splitpath.c compilation. * Mkfiles: Likewise. svn path=/trunk/yasm/; revision=1433 --- diff --git a/Mkfiles/Makefile.dj b/Mkfiles/Makefile.dj index eb3c0d54..421bc692 100644 --- a/Mkfiles/Makefile.dj +++ b/Mkfiles/Makefile.dj @@ -31,7 +31,6 @@ LIBYASM_OBJS= \ libyasm/mergesort.o \ libyasm/phash.o \ libyasm/section.o \ - libyasm/splitpath.o \ libyasm/strcasecmp.o \ libyasm/strsep.o \ libyasm/symrec.o \ diff --git a/Mkfiles/Makefile.flat b/Mkfiles/Makefile.flat index bf19806e..7e34bd24 100644 --- a/Mkfiles/Makefile.flat +++ b/Mkfiles/Makefile.flat @@ -34,7 +34,6 @@ LIBYASM_OBJS= \ libyasm/mergesort.o \ libyasm/phash.o \ libyasm/section.o \ - libyasm/splitpath.o \ libyasm/strcasecmp.o \ libyasm/strsep.o \ libyasm/symrec.o \ diff --git a/Mkfiles/vc/libyasm/libyasm.vcproj b/Mkfiles/vc/libyasm/libyasm.vcproj index f4b14f18..c586293c 100644 --- a/Mkfiles/vc/libyasm/libyasm.vcproj +++ b/Mkfiles/vc/libyasm/libyasm.vcproj @@ -168,9 +168,6 @@ - - diff --git a/Mkfiles/vc8/libyasm/libyasm.vcproj b/Mkfiles/vc8/libyasm/libyasm.vcproj index c9441610..3a72ec01 100644 --- a/Mkfiles/vc8/libyasm/libyasm.vcproj +++ b/Mkfiles/vc8/libyasm/libyasm.vcproj @@ -389,10 +389,6 @@ RelativePath="..\..\..\libyasm\section.c" > - - diff --git a/libyasm/Makefile.inc b/libyasm/Makefile.inc index db5351cf..105173cb 100644 --- a/libyasm/Makefile.inc +++ b/libyasm/Makefile.inc @@ -15,7 +15,6 @@ libyasm_a_SOURCES += libyasm/md5.c libyasm_a_SOURCES += libyasm/mergesort.c libyasm_a_SOURCES += libyasm/phash.c libyasm_a_SOURCES += libyasm/section.c -libyasm_a_SOURCES += libyasm/splitpath.c libyasm_a_SOURCES += libyasm/strcasecmp.c libyasm_a_SOURCES += libyasm/strsep.c libyasm_a_SOURCES += libyasm/symrec.c diff --git a/libyasm/coretype.h b/libyasm/coretype.h index 4c51ef0a..14ebc43d 100644 --- a/libyasm/coretype.h +++ b/libyasm/coretype.h @@ -311,47 +311,6 @@ int yasm__strcasecmp(const char *s1, const char *s2); */ int yasm__strncasecmp(const char *s1, const char *s2, size_t n); -/** Split a UNIX pathname into head (directory) and tail (base filename) - * portions. - * \internal - * \param path pathname - * \param tail (returned) base filename - * \return Length of head (directory). - */ -size_t yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail); - -/** Split a Windows pathname into head (directory) and tail (base filename) - * portions. - * \internal - * \param path pathname - * \param tail (returned) base filename - * \return Length of head (directory). - */ -size_t yasm__splitpath_win(const char *path, /*@out@*/ const char **tail); - -#ifndef yasm__splitpath -/** Split a pathname into head (directory) and tail (base filename) portions. - * Unless otherwise defined, defaults to yasm__splitpath_unix(). - * \internal - * \param path pathname - * \param tail (returned) base filename - * \return Length of head (directory). - */ -# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ - defined (__DJGPP__) || defined (__OS2__) || defined (__CYGWIN__) || \ - defined (__CYGWIN32__) -# define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) -# ifndef YASM_PATHSEP -# define YASM_PATHSEP '\\' -# endif -# else -# define yasm__splitpath(path, tail) yasm__splitpath_unix(path, tail) -# ifndef YASM_PATHSEP -# define YASM_PATHSEP '/' -# endif -# endif -#endif - /** strdup() implementation using yasm_xmalloc(). * \internal * \param str string diff --git a/libyasm/file.c b/libyasm/file.c index 4ff42beb..598579bc 100644 --- a/libyasm/file.c +++ b/libyasm/file.c @@ -1,7 +1,7 @@ /* - * Little-endian file functions. + * File helper functions. * - * Copyright (C) 2001 Peter Johnson + * Copyright (C) 2001-2006 Peter Johnson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -24,6 +24,8 @@ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ +#include + #define YASM_LIB_INTERNAL #include "util.h" /*@unused@*/ RCSID("$Id$"); @@ -31,6 +33,54 @@ #include "file.h" +size_t +yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail) +{ + const char *s; + s = strrchr(path, '/'); + if (!s) { + /* No head */ + *tail = path; + return 0; + } + *tail = s+1; + /* Strip trailing slashes on path (except leading) */ + while (s>path && *s == '/') + s--; + /* Return length of head */ + return s-path+1; +} + +size_t +yasm__splitpath_win(const char *path, /*@out@*/ const char **tail) +{ + const char *basepath = path; + const char *s; + + /* split off drive letter first, if any */ + if (isalpha(path[0]) && path[1] == ':') + basepath += 2; + + s = basepath; + while (*s != '\0') + s++; + while (s >= basepath && *s != '\\' && *s != '/') + s--; + if (s < basepath) { + *tail = basepath; + if (path == basepath) + return 0; /* No head */ + else + return 2; /* Drive letter is head */ + } + *tail = s+1; + /* Strip trailing slashes on path (except leading) */ + while (s>basepath && (*s == '/' || *s == '\\')) + s--; + /* Return length of head */ + return s-path+1; +} + size_t yasm_fwrite_16_l(unsigned short val, FILE *f) { diff --git a/libyasm/file.h b/libyasm/file.h index 70ff3a00..1df3db89 100644 --- a/libyasm/file.h +++ b/libyasm/file.h @@ -1,13 +1,13 @@ /** * \file libyasm/file.h - * \brief YASM big and little endian file interface. + * \brief YASM file helpers. * * \rcs * $Id$ * \endrcs * * \license - * Copyright (C) 2001 Peter Johnson + * Copyright (C) 2001-2006 Peter Johnson * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -34,6 +34,55 @@ #ifndef YASM_FILE_H #define YASM_FILE_H +/** Split a UNIX pathname into head (directory) and tail (base filename) + * portions. + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +size_t yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail); + +/** Split a Windows pathname into head (directory) and tail (base filename) + * portions. + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +size_t yasm__splitpath_win(const char *path, /*@out@*/ const char **tail); + +#ifndef yasm__splitpath +/** Split a pathname into head (directory) and tail (base filename) portions. + * Unless otherwise defined, defaults to yasm__splitpath_unix(). + * \internal + * \param path pathname + * \param tail (returned) base filename + * \return Length of head (directory). + */ +# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ + defined (__DJGPP__) || defined (__OS2__) || defined (__CYGWIN__) || \ + defined (__CYGWIN32__) +# define yasm__splitpath(path, tail) yasm__splitpath_win(path, tail) +# else +# define yasm__splitpath(path, tail) yasm__splitpath_unix(path, tail) +# endif +#endif + +#ifndef YASM_PATHSEP +/** Default path separator; used when combining path components. + * Unless otherwise defined, defaults to the UNIX '/'. + * \internal + */ +# if defined (_WIN32) || defined (WIN32) || defined (__MSDOS__) || \ + defined (__DJGPP__) || defined (__OS2__) || defined (__CYGWIN__) || \ + defined (__CYGWIN32__) +# define YASM_PATHSEP '\\' +# else +# define YASM_PATHSEP '/' +# endif +#endif + /** Write an 8-bit value to a buffer, incrementing buffer pointer. * \note Only works properly if ptr is an (unsigned char *). * \param ptr buffer diff --git a/libyasm/splitpath.c b/libyasm/splitpath.c deleted file mode 100644 index 5629ada9..00000000 --- a/libyasm/splitpath.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Split a path into directory name and file name. - * - * Copyright (C) 2006 Peter Johnson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER 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 AUTHOR OR OTHER 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. - */ -#include - -#define YASM_LIB_INTERNAL -#include "util.h" -/*@unused@*/ RCSID("$Id$"); - -#include "coretype.h" - -size_t -yasm__splitpath_unix(const char *path, /*@out@*/ const char **tail) -{ - const char *s; - s = strrchr(path, '/'); - if (!s) { - /* No head */ - *tail = path; - return 0; - } - *tail = s+1; - /* Strip trailing slashes on path (except leading) */ - while (s>path && *s == '/') - s--; - /* Return length of head */ - return s-path+1; -} - -size_t -yasm__splitpath_win(const char *path, /*@out@*/ const char **tail) -{ - const char *basepath = path; - const char *s; - - /* split off drive letter first, if any */ - if (isalpha(path[0]) && path[1] == ':') - basepath += 2; - - s = basepath; - while (*s != '\0') - s++; - while (s >= basepath && *s != '\\' && *s != '/') - s--; - if (s < basepath) { - *tail = basepath; - if (path == basepath) - return 0; /* No head */ - else - return 2; /* Drive letter is head */ - } - *tail = s+1; - /* Strip trailing slashes on path (except leading) */ - while (s>basepath && (*s == '/' || *s == '\\')) - s--; - /* Return length of head */ - return s-path+1; -} -