LIB_CURLX_CFILES = \
curlx/base64.c \
+ curlx/basename.c \
curlx/dynbuf.c \
curlx/fopen.c \
curlx/inet_ntop.c \
curlx/winapi.c
LIB_CURLX_HFILES = \
- curlx/binmode.h \
curlx/base64.h \
+ curlx/binmode.h \
+ curlx/basename.h \
curlx/curlx.h \
curlx/dynbuf.h \
curlx/fopen.h \
* SPDX-License-Identifier: curl
*
***************************************************************************/
-#include "tool_setup.h"
+#include "../curl_setup.h"
#ifndef HAVE_BASENAME
-#include "tool_bname.h"
+#include "basename.h"
-char *tool_basename(char *path)
+/*
+ (Quote from The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004
+ Edition)
+
+ The basename() function shall take the pathname pointed to by path and
+ return a pointer to the final component of the pathname, deleting any
+ trailing '/' characters.
+
+ If the string pointed to by path consists entirely of the '/' character,
+ basename() shall return a pointer to the string "/". If the string pointed
+ to by path is exactly "//", it is implementation-defined whether '/' or "//"
+ is returned.
+
+ If path is a null pointer or points to an empty string, basename() shall
+ return a pointer to the string ".".
+
+ The basename() function may modify the string pointed to by path, and may
+ return a pointer to static storage that may then be overwritten by a
+ subsequent call to basename().
+
+ The basename() function need not be reentrant. A function that is not
+ required to be reentrant is not required to be thread-safe.
+
+*/
+char *curlx_basename(char *path)
{
+ /* Ignore all the details above for now and make a quick and simple
+ implementation here */
char *s1;
char *s2;
s1 = strrchr(path, '/');
s2 = strrchr(path, '\\');
- if(s1 && s2) {
- path = (s1 > s2) ? s1 + 1 : s2 + 1;
- }
+ if(s1 && s2)
+ path = ((s1 > s2) ? s1 : s2) + 1;
else if(s1)
path = s1 + 1;
else if(s2)
return path;
}
-#endif /* HAVE_BASENAME */
+#endif /* !HAVE_BASENAME */
-#ifndef HEADER_CURL_TOOL_BNAME_H
-#define HEADER_CURL_TOOL_BNAME_H
+#ifndef HEADER_CURLX_BASENAME_H
+#define HEADER_CURLX_BASENAME_H
/***************************************************************************
* _ _ ____ _
* Project ___| | | | _ \| |
* SPDX-License-Identifier: curl
*
***************************************************************************/
-#include "tool_setup.h"
+#include "../curl_setup.h"
#ifndef HAVE_BASENAME
+char *curlx_basename(char *path);
+#else
-char *tool_basename(char *path);
+#ifdef HAVE_LIBGEN_H
+#include <libgen.h>
+#endif
-#define basename(x) tool_basename(x)
+#define curlx_basename(x) basename(x)
+#endif /* !HAVE_BASENAME */
-#endif /* HAVE_BASENAME */
-
-#endif /* HEADER_CURL_TOOL_BNAME_H */
+#endif /* HEADER_CURLX_BASENAME_H */
* be.
*/
+#include "basename.h"
+/* for curlx_basename() function */
+
#include "binmode.h"
/* "binmode.h" provides macro CURLX_SET_BINMODE() */
#include "curl_trc.h"
#include "transfer.h"
#include "strdup.h"
+#include "curlx/basename.h"
#include "curlx/strcopy.h"
#include "curlx/fopen.h"
#include "curlx/base64.h"
!defined(CURL_DISABLE_SMTP) || \
!defined(CURL_DISABLE_IMAP))
-#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
-#include <libgen.h>
-#endif
-
#include "rand.h"
#include "slist.h"
#include "curlx/dynbuf.h"
#define fopen_read vmsfopenread
#endif /* !__VMS */
-#ifndef HAVE_BASENAME
-/*
- (Quote from The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004
- Edition)
-
- The basename() function shall take the pathname pointed to by path and
- return a pointer to the final component of the pathname, deleting any
- trailing '/' characters.
-
- If the string pointed to by path consists entirely of the '/' character,
- basename() shall return a pointer to the string "/". If the string pointed
- to by path is exactly "//", it is implementation-defined whether '/' or "//"
- is returned.
-
- If path is a null pointer or points to an empty string, basename() shall
- return a pointer to the string ".".
-
- The basename() function may modify the string pointed to by path, and may
- return a pointer to static storage that may then be overwritten by a
- subsequent call to basename().
-
- The basename() function need not be reentrant. A function that is not
- required to be reentrant is not required to be thread-safe.
-
-*/
-static char *Curl_basename(char *path)
-{
- /* Ignore all the details above for now and make a quick and simple
- implementation here */
- char *s1;
- char *s2;
-
- s1 = strrchr(path, '/');
- s2 = strrchr(path, '\\');
-
- if(s1 && s2) {
- path = (s1 > s2 ? s1 : s2) + 1;
- }
- else if(s1)
- path = s1 + 1;
- else if(s2)
- path = s2 + 1;
-
- return path;
-}
-
-#define basename(x) Curl_basename(x)
-#endif /* !HAVE_BASENAME */
-
/* Set readback state. */
static void mimesetstate(struct mime_state *state,
enum mimestate tok, void *ptr)
the buffer it works on */
if(!filename)
return NULL;
- base = curlx_strdup(basename(filename));
+ base = curlx_strdup(curlx_basename(filename));
curlx_free(filename); /* free temporary buffer */
# the official API, but we reuse the code here to avoid duplication.
CURLX_CFILES = \
../lib/curlx/base64.c \
+ ../lib/curlx/basename.c \
../lib/curlx/dynbuf.c \
../lib/curlx/fopen.c \
../lib/curlx/multibyte.c \
config2setopts.c \
slist_wc.c \
terminal.c \
- tool_bname.c \
tool_cb_dbg.c \
tool_cb_hdr.c \
tool_cb_prg.c \
config2setopts.h \
slist_wc.h \
terminal.h \
- tool_bname.h \
tool_cb_dbg.h \
tool_cb_hdr.h \
tool_cb_prg.h \
#if defined(_WIN32) || defined(MSDOS)
-#if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME)
-# include <libgen.h>
-#endif
-
#ifdef _WIN32
# include <tlhelp32.h>
# undef PATH_MAX
#endif
#include "tool_cfgable.h"
-#include "tool_bname.h"
#include "tool_doswin.h"
#include "tool_msgs.h"
memcpy(buffer, file_name, len + 1);
- base = basename(buffer);
+ base = curlx_basename(buffer);
/* Rename reserved device names that are known to be accessible without \\.\
Examples: CON => _CON, CON.EXT => CON_EXT, CON:ADS => CON_ADS
/* the basename pointer must be updated since the path has expanded */
if(p == buffer)
- base = basename(buffer);
+ base = curlx_basename(buffer);
}
/* This is the legacy portion from rename_if_dos_device_name that checks for