added qse_stradup() and related functions
coded qse_dir_change() for win32
This commit is contained in:
@ -21,16 +21,21 @@
|
||||
#include <qse/cmn/path.h>
|
||||
|
||||
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
# define ISMSEP(c) ((c) == QSE_MT('/') || (c) == QSE_MT('\\'))
|
||||
# define ISWSEP(c) ((c) == QSE_WT('/') || (c) == QSE_WT('\\'))
|
||||
#else
|
||||
# define ISMSEP(c) ((c) == QSE_MT('/'))
|
||||
# define ISWSEP(c) ((c) == QSE_WT('/'))
|
||||
#endif
|
||||
|
||||
const qse_mchar_t* qse_mbsbasename (const qse_mchar_t* path)
|
||||
{
|
||||
const qse_mchar_t* p, * last = QSE_NULL;
|
||||
|
||||
for (p = path; *p != QSE_MT('\0'); p++)
|
||||
{
|
||||
if (*p == QSE_MT('/')) last = p;
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
else if (*p == QSE_MT('\\')) last = p;
|
||||
#endif
|
||||
if (ISMSEP(*p)) last = p;
|
||||
}
|
||||
|
||||
return (last == QSE_NULL)? path: (last + 1);
|
||||
@ -42,10 +47,7 @@ const qse_wchar_t* qse_wcsbasename (const qse_wchar_t* path)
|
||||
|
||||
for (p = path; *p != QSE_WT('\0'); p++)
|
||||
{
|
||||
if (*p == QSE_WT('/')) last = p;
|
||||
#if defined(_WIN32) || defined(__OS2__) || defined(__DOS__)
|
||||
else if (*p == QSE_WT('\\')) last = p;
|
||||
#endif
|
||||
if (ISWSEP(*p)) last = p;
|
||||
}
|
||||
|
||||
return (last == QSE_NULL)? path: (last + 1);
|
||||
|
@ -72,6 +72,27 @@ qse_mchar_t* qse_mbsxdup2 (
|
||||
return tmp;
|
||||
}
|
||||
|
||||
qse_mchar_t* qse_mbsadup (const qse_mchar_t* str[], qse_mmgr_t* mmgr)
|
||||
{
|
||||
qse_mchar_t* buf, * ptr;
|
||||
qse_size_t i;
|
||||
qse_size_t capa = 0;
|
||||
|
||||
QSE_ASSERT (mmgr != QSE_NULL);
|
||||
|
||||
for (i = 0; str[i]; i++) capa += qse_mbslen(str[i]);
|
||||
|
||||
buf = (qse_mchar_t*) QSE_MMGR_ALLOC (mmgr, (capa+1)*QSE_SIZEOF(*buf));
|
||||
if (buf == QSE_NULL) return QSE_NULL;
|
||||
|
||||
ptr = buf;
|
||||
for (i = 0; str[i]; i++) ptr += qse_mbscpy (ptr, str[i]);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------- */
|
||||
|
||||
qse_wchar_t* qse_wcsdup (const qse_wchar_t* str, qse_mmgr_t* mmgr)
|
||||
{
|
||||
qse_wchar_t* tmp;
|
||||
@ -124,3 +145,23 @@ qse_wchar_t* qse_wcsxdup2 (
|
||||
qse_wcsncpy (tmp + len1, str2, len2);
|
||||
return tmp;
|
||||
}
|
||||
|
||||
qse_wchar_t* qse_wcsadup (const qse_wchar_t* str[], qse_mmgr_t* mmgr)
|
||||
{
|
||||
qse_wchar_t* buf, * ptr;
|
||||
qse_size_t i;
|
||||
qse_size_t capa = 0;
|
||||
|
||||
QSE_ASSERT (mmgr != QSE_NULL);
|
||||
|
||||
for (i = 0; str[i]; i++) capa += qse_wcslen(str[i]);
|
||||
|
||||
buf = (qse_wchar_t*) QSE_MMGR_ALLOC (mmgr, (capa+1)*QSE_SIZEOF(*buf));
|
||||
if (buf == QSE_NULL) return QSE_NULL;
|
||||
|
||||
ptr = buf;
|
||||
for (i = 0; str[i]; i++) ptr += qse_wcscpy (ptr, str[i]);
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user