added qse_get_current_mbsdir()/qse_get_current_wcsdir().

writing qse_get_prog_path(). not yet done.
implementing the Path class
This commit is contained in:
2019-03-13 06:38:54 +00:00
parent 69d0e959da
commit 10b1eabe86
14 changed files with 622 additions and 133 deletions

View File

@ -33,6 +33,10 @@
#undef strjoinv
#undef strxjoin
#undef strxjoinv
#undef strcajoin
#undef strcajoinv
#undef strxcajoin
#undef strxcajoinv
#undef strcpy
#undef strxcpy
@ -41,6 +45,10 @@
#define strjoinv qse_mbsjoinv
#define strxjoin qse_mbsxjoin
#define strxjoinv qse_mbsxjoinv
#define strcajoin qse_mbscajoin
#define strcajoinv qse_mbscajoinv
#define strxcajoin qse_mbsxcajoin
#define strxcajoinv qse_mbsxcajoinv
#define strcpy qse_mbscpy
#define strxcpy qse_mbsxcpy
#include "str-join.h"
@ -52,6 +60,10 @@
#undef strjoinv
#undef strxjoin
#undef strxjoinv
#undef strcajoin
#undef strcajoinv
#undef strxcajoin
#undef strxcajoinv
#undef strcpy
#undef strxcpy
@ -60,6 +72,10 @@
#define strjoinv qse_wcsjoinv
#define strxjoin qse_wcsxjoin
#define strxjoinv qse_wcsxjoinv
#define strcajoin qse_wcscajoin
#define strcajoinv qse_wcscajoinv
#define strxcajoin qse_wcsxcajoin
#define strxcajoinv qse_wcsxcajoinv
#define strcpy qse_wcscpy
#define strxcpy qse_wcsxcpy
#include "str-join.h"

View File

@ -89,3 +89,70 @@ qse_size_t strjoin (char_t* buf, ...)
return n;
}
/* ------------------------------------------------------------------------- */
qse_size_t strxcajoinv (char_t* buf, qse_size_t size, va_list ap)
{
const char_t* p;
char_t* ptr;
qse_size_t left, n;
n = strlen(buf);
left = size - n;
ptr = buf + n;
while (left > 0)
{
p = va_arg (ap, const char_t*);
if (p == QSE_NULL) break;
n = strxcpy(ptr, left, p);
left -= n; ptr += n;
}
return size - left;
}
qse_size_t strxcajoin (char_t* buf, qse_size_t size, ...)
{
va_list ap;
qse_size_t n;
va_start (ap, size);
n = strxcajoinv(buf, size, ap);
va_end (ap);
return n;
}
qse_size_t strcajoinv (char_t* buf, va_list ap)
{
const char_t* p;
char_t* ptr = buf + strlen(buf);
qse_size_t n;
while (1)
{
p = va_arg(ap, const char_t*);
if (p == QSE_NULL) break;
n = strcpy(ptr, p);
ptr += n;
}
return ptr - buf;
}
qse_size_t strcajoin (char_t* buf, ...)
{
va_list ap;
qse_size_t n;
va_start (ap, buf);
n = strcajoinv(buf, ap);
va_end (ap);
return n;
}

View File

@ -505,6 +505,16 @@
# define QSE_UTIMENSAT(dirfd,path,times,flags) utimensat(dirfd,path,times,flags)
#endif
/*
the library's getcwd() returns char* while the system call returns int.
so it's not practical to define QSE_GETCWD().
#if defined(SYS_getcwd) && defined(QSE_USE_SYSCALL)
# define QSE_GETCWD(buf,size) syscall(SYS_getcwd,buf,size)
#else
# define QSE_GETCWD(buf,size) getcwd(buf,size)
#endif
*/
/* ===== DIRECTORY - not really system calls ===== */
#define QSE_OPENDIR(name) opendir(name)
#define QSE_CLOSEDIR(dir) closedir(dir)