aboutsummaryrefslogtreecommitdiff
path: root/project/dclib
diff options
context:
space:
mode:
authorWiimm <wiimm@wiimm.de>2022-08-06 16:20:07 +0200
committerWiimm <wiimm@wiimm.de>2022-08-06 16:20:07 +0200
commit7fad9e9383d01cce3ac17176404e1ab4e738736c (patch)
treedf39dd0616554ce9daa138f2e9778c88fbf9ac55 /project/dclib
parent06ff18cd020779c226f7c25d22016e06b898f303 (diff)
SZS v2.28a.beta2
Diffstat (limited to '')
-rw-r--r--project/dclib/dclib-basics.c113
-rw-r--r--project/dclib/dclib-basics.h105
-rw-r--r--project/dclib/dclib-file.c4
-rw-r--r--project/dclib/dclib-file.h2
-rw-r--r--project/dclib/dclib-network.c4
-rw-r--r--project/dclib/dclib-ui.c4
-rw-r--r--project/dclib/dclib-utf8.c78
-rw-r--r--project/dclib/dclib-utf8.h6
8 files changed, 208 insertions, 108 deletions
diff --git a/project/dclib/dclib-basics.c b/project/dclib/dclib-basics.c
index 03e3215..d2eca00 100644
--- a/project/dclib/dclib-basics.c
+++ b/project/dclib/dclib-basics.c
@@ -408,22 +408,19 @@ void FreeString ( ccp str )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-char * StringCopyE ( char * buf, ccp buf_end, ccp src )
+char * StringCopyS ( char * buf, ssize_t buf_size, ccp src )
{
- // RESULT: end of copied string pointing to NULL
- // 'src' may be a NULL pointer.
-
- if ( buf >= buf_end )
- return (char*)buf_end - 1;
-
DASSERT(buf);
- DASSERT(buf<buf_end);
+ if ( !buf || buf_size <= 0 )
+ return buf;
if (src)
{
- buf_end--;
- while( buf < buf_end && *src )
- *buf++ = *src++;
+ size_t slen = strlen(src);
+ if ( slen >= buf_size )
+ slen = buf_size-1;
+ memcpy(buf,src,slen);
+ buf += slen;
}
*buf = 0;
@@ -432,49 +429,49 @@ char * StringCopyE ( char * buf, ccp buf_end, ccp src )
//-----------------------------------------------------------------------------
-char * StringCopyS ( char * buf, size_t buf_size, ccp src )
+char * StringCopySM ( char * buf, ssize_t buf_size, ccp src, ssize_t max_copy )
{
DASSERT(buf);
- if ( buf_size <= 0 )
+ if ( !buf || buf_size <= 0 )
return buf;
- DASSERT(buf_size>=0);
-
if (src)
- while( --buf_size > 0 && *src )
- *buf++ = *src++;
+ {
+ size_t slen = strlen(src);
+ if ( slen >= buf_size )
+ slen = buf_size-1;
+ if ( max_copy >= 0 && slen >= max_copy )
+ slen = max_copy;
+ memcpy(buf,src,slen);
+ buf += slen;
+ }
+
*buf = 0;
return buf;
}
-///////////////////////////////////////////////////////////////////////////////
+//-----------------------------------------------------------------------------
-char * StringCopyEM ( char * buf, ccp buf_end, ccp src, ssize_t max_copy )
+char * StringCopySL ( char * buf, ssize_t buf_size, ccp src, ssize_t src_len )
{
- // RESULT: end of copied string pointing to NULL
- // 'src' may be a NULL pointer.
-
DASSERT(buf);
- DASSERT(buf<buf_end);
- buf_end--;
- if ( max_copy >= 0 && buf + max_copy < buf_end )
- buf_end = buf + max_copy;
+ if ( !buf || buf_size <= 0 )
+ return buf;
if (src)
- while( buf < buf_end && *src )
- *buf++ = *src++;
+ {
+ if ( src_len < 0 )
+ src_len = strlen(src);
+ if ( src_len >= buf_size )
+ src_len = buf_size-1;
+ memcpy(buf,src,src_len);
+ buf += src_len;
+ }
*buf = 0;
return buf;
}
-//-----------------------------------------------------------------------------
-
-char * StringCopySM ( char * buf, size_t buf_size, ccp src, ssize_t max_copy )
-{
- return StringCopyEM(buf,buf+buf_size,src,max_copy);
-}
-
///////////////////////////////////////////////////////////////////////////////
char * StringCat2E ( char * buf, ccp buf_end, ccp src1, ccp src2 )
@@ -500,7 +497,7 @@ char * StringCat2E ( char * buf, ccp buf_end, ccp src1, ccp src2 )
//-----------------------------------------------------------------------------
-char * StringCat2S ( char * buf, size_t buf_size, ccp src1, ccp src2 )
+char * StringCat2S ( char * buf, ssize_t buf_size, ccp src1, ccp src2 )
{
return StringCat2E(buf,buf+buf_size,src1,src2);
}
@@ -541,7 +538,7 @@ char * StringCatSep2E ( char * buf, ccp buf_end, ccp sep, ccp src1, ccp src2 )
//-----------------------------------------------------------------------------
-char * StringCatSep2S ( char * buf, size_t buf_size, ccp sep, ccp src1, ccp src2 )
+char * StringCatSep2S ( char * buf, ssize_t buf_size, ccp sep, ccp src1, ccp src2 )
{
return StringCatSep2E(buf,buf+buf_size,sep,src1,src2);
}
@@ -575,7 +572,7 @@ char * StringCat3E ( char * buf, ccp buf_end, ccp src1, ccp src2, ccp src3 )
//-----------------------------------------------------------------------------
-char * StringCat3S ( char * buf, size_t buf_size, ccp src1, ccp src2, ccp src3 )
+char * StringCat3S ( char * buf, ssize_t buf_size, ccp src1, ccp src2, ccp src3 )
{
return StringCat3E(buf,buf+buf_size,src1,src2,src3);
}
@@ -631,7 +628,7 @@ char * StringCatSep3E
//-----------------------------------------------------------------------------
char * StringCatSep3S
- ( char * buf, size_t buf_size, ccp sep, ccp src1, ccp src2, ccp src3 )
+ ( char * buf, ssize_t buf_size, ccp sep, ccp src1, ccp src2, ccp src3 )
{
return StringCatSep3E(buf,buf+buf_size,sep,src1,src2,src3);
}
@@ -745,7 +742,7 @@ char * StringLowerE ( char * buf, ccp buf_end, ccp src )
//-----------------------------------------------------------------------------
-char * StringLowerS ( char * buf, size_t buf_size, ccp src )
+char * StringLowerS ( char * buf, ssize_t buf_size, ccp src )
{
return StringLowerE(buf,buf+buf_size,src);
}
@@ -777,7 +774,7 @@ char * MemLowerE ( char * buf, ccp buf_end, mem_t src )
//-----------------------------------------------------------------------------
-char * MemLowerS ( char * buf, size_t buf_size, mem_t src )
+char * MemLowerS ( char * buf, ssize_t buf_size, mem_t src )
{
return MemLowerE(buf,buf+buf_size,src);
}
@@ -806,7 +803,7 @@ char * StringUpperE ( char * buf, ccp buf_end, ccp src )
//-----------------------------------------------------------------------------
-char * StringUpperS ( char * buf, size_t buf_size, ccp src )
+char * StringUpperS ( char * buf, ssize_t buf_size, ccp src )
{
return StringUpperE(buf,buf+buf_size,src);
}
@@ -838,7 +835,7 @@ char * MemUpperE ( char * buf, ccp buf_end, mem_t src )
//-----------------------------------------------------------------------------
-char * MemUpperS ( char * buf, size_t buf_size, mem_t src )
+char * MemUpperS ( char * buf, ssize_t buf_size, mem_t src )
{
return MemUpperE(buf,buf+buf_size,src);
}
@@ -1008,7 +1005,7 @@ int SleepNSec ( s_nsec_t nsec )
/////////////// PathCat*() ///////////////
///////////////////////////////////////////////////////////////////////////////
-char * PathCatBufPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
+char * PathCatBufPP ( char * buf, ssize_t bufsize, ccp path1, ccp path2 )
{
// concatenate path + path; returns buf
@@ -1039,7 +1036,7 @@ char * PathCatBufPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
///////////////////////////////////////////////////////////////////////////////
-ccp PathCatPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
+ccp PathCatPP ( char * buf, ssize_t bufsize, ccp path1, ccp path2 )
{
// concatenate path + path; returns path1 | path2 | buf
@@ -1061,7 +1058,7 @@ ccp PathCatPP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
///////////////////////////////////////////////////////////////////////////////
-ccp PathCatDirP ( char * buf, size_t bufsize, ccp path1, ccp path2 )
+ccp PathCatDirP ( char * buf, ssize_t bufsize, ccp path1, ccp path2 )
{
// concatenate path + path; returns path1 | path2 | buf
@@ -1085,7 +1082,7 @@ ccp PathAllocPP ( ccp path1, ccp path2 )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-char * PathCatBufPPE ( char * buf, size_t bufsize, ccp path1, ccp path2, ccp ext )
+char * PathCatBufPPE ( char * buf, ssize_t bufsize, ccp path1, ccp path2, ccp ext )
{
// concatenate path + path; returns (by definition) path1 | path2 | buf
@@ -1125,7 +1122,7 @@ ccp PathAllocPPE ( ccp path1, ccp path2, ccp ext )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-char * PathCatBufBP ( char *buf, size_t bufsize, ccp base, ccp path )
+char * PathCatBufBP ( char *buf, ssize_t bufsize, ccp base, ccp path )
{
// PathCatBP() is special: path can be part of buf
@@ -1167,7 +1164,7 @@ char * PathCatBufBP ( char *buf, size_t bufsize, ccp base, ccp path )
///////////////////////////////////////////////////////////////////////////////
-ccp PathCatBP ( char *buf, size_t bufsize, ccp base, ccp path )
+ccp PathCatBP ( char *buf, ssize_t bufsize, ccp base, ccp path )
{
// PathCatBP() is special: path can be part of buf
@@ -1188,7 +1185,7 @@ ccp PathAllocBP ( ccp base, ccp path )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-char * PathCatBufBPP ( char * buf, size_t bufsize, ccp base, ccp path1, ccp path2 )
+char * PathCatBufBPP ( char * buf, ssize_t bufsize, ccp base, ccp path1, ccp path2 )
{
ccp path = PathCatPP(buf,bufsize,path1,path2);
return PathCatBufBP(buf,bufsize,base,path);
@@ -1196,7 +1193,7 @@ char * PathCatBufBPP ( char * buf, size_t bufsize, ccp base, ccp path1, ccp path
///////////////////////////////////////////////////////////////////////////////
-ccp PathCatBPP ( char * buf, size_t bufsize, ccp base, ccp path1, ccp path2 )
+ccp PathCatBPP ( char * buf, ssize_t bufsize, ccp base, ccp path1, ccp path2 )
{
ccp path = PathCatPP(buf,bufsize,path1,path2);
return PathCatBP(buf,bufsize,base,path);
@@ -1213,7 +1210,7 @@ ccp PathAllocBPP ( ccp base, ccp path1, ccp path2 )
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
-char * PathCatBufBPPE ( char * buf, size_t bufsize, ccp base, ccp path1, ccp path2, ccp ext )
+char * PathCatBufBPPE ( char * buf, ssize_t bufsize, ccp base, ccp path1, ccp path2, ccp ext )
{
ccp path = PathCatPPE(buf,bufsize,path1,path2,ext);
return PathCatBufBP(buf,bufsize,base,path);
@@ -1221,7 +1218,7 @@ char * PathCatBufBPPE ( char * buf, size_t bufsize, ccp base, ccp path1, ccp pat
///////////////////////////////////////////////////////////////////////////////
-ccp PathCatBPPE ( char * buf, size_t bufsize, ccp base, ccp path1, ccp path2, ccp ext )
+ccp PathCatBPPE ( char * buf, ssize_t bufsize, ccp base, ccp path1, ccp path2, ccp ext )
{
ccp path = PathCatPPE(buf,bufsize,path1,path2,ext);
return PathCatBP(buf,bufsize,base,path);
@@ -1316,7 +1313,7 @@ char * NewFileExtE ( char * buf, ccp buf_end, ccp path, ccp ext )
///////////////////////////////////////////////////////////////////////////////
-char * NewFileExtS ( char * buf, size_t bufsize, ccp path, ccp ext )
+char * NewFileExtS ( char * buf, ssize_t bufsize, ccp path, ccp ext )
{
return NewFileExtE(buf,buf+bufsize,path,ext);
}
@@ -3239,14 +3236,14 @@ uint ScanQuotedArgManager ( ArgManager_t *am, ccp src, bool is_utf8 )
}
else
{
- while ( dest < bufend && !isspace(*src) && *src != '\'' && *src != '\"' )
+ while ( dest < bufend && *src && !isspace(*src) && *src != '\'' && *src != '\"' )
{
if ( *src == '\\' && src[1] )
src++;
*dest++ = *src++;
}
}
- if (isspace(*src))
+ if ( !*src || isspace(*src) )
break;
}
ccp arg = MEMDUP(buf,dest-buf);
@@ -3377,7 +3374,7 @@ enumError ExpandAtArgManager
if (n_rm)
{
- PRINT1("rm @%u %d, file=%s\n",pos,n_rm,fname);
+ PRINT0("rm @%u %d, file=%s\n",pos,n_rm,fname);
int n_added;
enumError err = ScanFileArgManager(am,pos,fname,silent,&n_added);
if ( max_err < err )
@@ -3389,7 +3386,7 @@ enumError ExpandAtArgManager
}
// remove after insert to keep fname valid!
- PRINT1("rm @%u %d\n",pos,n_rm);
+ PRINT0("rm @%u %d\n",pos,n_rm);
RemoveArgManager(am,pos,n_rm);
}
else
diff --git a/project/dclib/dclib-basics.h b/project/dclib/dclib-basics.h
index 01e53a7..d15997c 100644
--- a/project/dclib/dclib-basics.h
+++ b/project/dclib/dclib-basics.h
@@ -58,6 +58,20 @@
//
///////////////////////////////////////////////////////////////////////////////
+/////////////// conditionals ///////////////
+///////////////////////////////////////////////////////////////////////////////
+// support function utimensat()
+
+#undef SUPPORT_UTIMENSAT
+
+#if defined(UTIME_OMIT) && !defined(__APPLE__)
+ #define SUPPORT_UTIMENSAT 1
+#else
+ #define SUPPORT_UTIMENSAT 0
+#endif
+
+//
+///////////////////////////////////////////////////////////////////////////////
/////////////// helpers ///////////////
///////////////////////////////////////////////////////////////////////////////
@@ -1472,52 +1486,61 @@ int GetProgramPath
//-----
-// StringCopyS(), StringCopyE(), StringCat*()
+// StringCopy*(), StringCat*()
// RESULT: end of copied string pointing to a NULL character.
// 'src*' may be a NULL pointer.
-// if max_copy<0: ignore it!
+// MAX_COPY define max number of bytes to copy.
+// It's only relevant if src is longer.
+// If MAX_COPY<0: ignore it.
+// SRC_LEN is the length of src (or the number of bytes to copy)
+// If SRC_LEN<0: use strlen(src)
-char * StringCopyS ( char *buf, size_t bufsize, ccp src );
-char * StringCopySM ( char *buf, size_t bufsize, ccp src, ssize_t max_copy );
-char * StringCat2S ( char *buf, size_t bufsize, ccp src1, ccp src2 );
-char * StringCat3S ( char *buf, size_t bufsize, ccp src1, ccp src2, ccp src3 );
+char * StringCopyS ( char *buf, ssize_t buf_size, ccp src );
+char * StringCopySM ( char *buf, ssize_t buf_size, ccp src, ssize_t max_copy );
+char * StringCopySL ( char *buf, ssize_t buf_size, ccp src, ssize_t src_len );
-char * StringCopyE ( char *buf, ccp buf_end, ccp src );
-char * StringCopyEM ( char *buf, ccp buf_end, ccp src, ssize_t max_copy );
-char * StringCat2E ( char *buf, ccp buf_end, ccp src1, ccp src2 );
-char * StringCat3E ( char *buf, ccp buf_end, ccp src1, ccp src2, ccp src3 );
+static inline char * StringCopyE ( char * buf, ccp buf_end, ccp src )
+ { return StringCopyS(buf,buf_end-buf,src); }
+static inline char * StringCopyEM ( char *buf, ccp buf_end, ccp src, ssize_t max_copy )
+ { return StringCopySM(buf,buf_end-buf,src,max_copy ); }
+static inline char * StringCopyEL ( char *buf, ccp buf_end, ccp src, ssize_t src_len )
+ { return StringCopySL(buf,buf_end-buf,src,src_len ); }
-// alloc space and return
-char * StringCat2A ( ccp src1, ccp src2 );
-char * StringCat3A ( ccp src1, ccp src2, ccp src3 );
+// concat sources, *A(): use MALLOC()
+char * StringCat2S ( char *buf, ssize_t buf_size, ccp src1, ccp src2 );
+char * StringCat3S ( char *buf, ssize_t buf_size, ccp src1, ccp src2, ccp src3 );
+char * StringCat2E ( char *buf, ccp buf_end, ccp src1, ccp src2 );
+char * StringCat3E ( char *buf, ccp buf_end, ccp src1, ccp src2, ccp src3 );
+char * StringCat2A ( ccp src1, ccp src2 );
+char * StringCat3A ( ccp src1, ccp src2, ccp src3 );
// like above, but cat with separators
-char * StringCatSep2S ( char *buf, size_t bufsize, ccp sep, ccp src1, ccp src2 );
-char * StringCatSep3S ( char *buf, size_t bufsize, ccp sep, ccp src1, ccp src2, ccp src3 );
-char * StringCatSep2E ( char *buf, ccp buf_end, ccp sep, ccp src1, ccp src2 );
-char * StringCatSep3E ( char *buf, ccp buf_end, ccp sep, ccp src1, ccp src2, ccp src3 );
+char * StringCatSep2S ( char *buf, ssize_t bufsize, ccp sep, ccp src1, ccp src2 );
+char * StringCatSep3S ( char *buf, ssize_t bufsize, ccp sep, ccp src1, ccp src2, ccp src3 );
+char * StringCatSep2E ( char *buf, ccp buf_end, ccp sep, ccp src1, ccp src2 );
+char * StringCatSep3E ( char *buf, ccp buf_end, ccp sep, ccp src1, ccp src2, ccp src3 );
char * StringCatSep2A ( ccp sep, ccp src1, ccp src2 );
char * StringCatSep3A ( ccp sep, ccp src1, ccp src2, ccp src3 );
// center string
ccp StringCenterE ( char * buf, ccp buf_end, ccp src, int width );
-static inline ccp StringCenterS ( char *buf, size_t bufsize, ccp src, int width )
+static inline ccp StringCenterS ( char *buf, ssize_t bufsize, ccp src, int width )
{ return StringCenterE(buf,buf+bufsize,src,width); }
-static inline char * StringCopySMem ( char *buf, size_t bufsize, mem_t mem )
+static inline char * StringCopySMem ( char *buf, ssize_t bufsize, mem_t mem )
{ return StringCopySM(buf,bufsize,mem.ptr,mem.len); }
static inline char * StringCopyEMem ( char *buf, ccp buf_end, mem_t mem )
{ return StringCopyEM(buf,buf_end,mem.ptr,mem.len); }
-char * StringLowerS ( char * buf, size_t bufsize, ccp src );
-char * StringLowerE ( char * buf, ccp buf_end, ccp src );
-char * StringUpperS ( char * buf, size_t bufsize, ccp src );
-char * StringUpperE ( char * buf, ccp buf_end, ccp src );
+char * StringLowerS ( char * buf, ssize_t bufsize, ccp src );
+char * StringLowerE ( char * buf, ccp buf_end, ccp src );
+char * StringUpperS ( char * buf, ssize_t bufsize, ccp src );
+char * StringUpperE ( char * buf, ccp buf_end, ccp src );
-char * MemLowerE ( char * buf, ccp buf_end, mem_t src );
-char * MemLowerS ( char * buf, size_t bufsize, mem_t src );
-char * MemUpperE ( char * buf, ccp buf_end, mem_t src );
-char * MemUpperS ( char * buf, size_t bufsize, mem_t src );
+char * MemLowerE ( char * buf, ccp buf_end, mem_t src );
+char * MemLowerS ( char * buf, ssize_t bufsize, mem_t src );
+char * MemUpperE ( char * buf, ccp buf_end, mem_t src );
+char * MemUpperS ( char * buf, ssize_t bufsize, mem_t src );
// special handling for unsigned decimals
int StrNumCmp ( ccp a, ccp b );
@@ -1533,29 +1556,29 @@ mem_t SkipEscapesM ( mem_t mem );
// Concatenate path + path, return pointer to buf
// Return pointer to buf or path1|path2|buf or alloced string
-char *PathCatBufPP ( char *buf, size_t bufsize, ccp path1, ccp path2 );
-char *PathCatBufPPE ( char *buf, size_t bufsize, ccp path1, ccp path2, ccp ext );
-ccp PathCatPP ( char *buf, size_t bufsize, ccp path1, ccp path2 );
-//ccp PathCatPPE ( char *buf, size_t bufsize, ccp path1, ccp path2, ccp ext );
+char *PathCatBufPP ( char *buf, ssize_t bufsize, ccp path1, ccp path2 );
+char *PathCatBufPPE ( char *buf, ssize_t bufsize, ccp path1, ccp path2, ccp ext );
+ccp PathCatPP ( char *buf, ssize_t bufsize, ccp path1, ccp path2 );
+//ccp PathCatPPE ( char *buf, ssize_t bufsize, ccp path1, ccp path2, ccp ext );
ccp PathAllocPP ( ccp path1, ccp path2 );
ccp PathAllocPPE ( ccp path1, ccp path2, ccp ext );
// inline wrapper
-static inline ccp PathCatPPE ( char *buf, size_t bufsize, ccp path1, ccp path2, ccp ext )
+static inline ccp PathCatPPE ( char *buf, ssize_t bufsize, ccp path1, ccp path2, ccp ext )
{ return PathCatBufPPE(buf,bufsize,path1,path2,ext); }
// like PathCatPP(), but ignores path2, if path1 is not empty and not a directory
-ccp PathCatDirP ( char * buf, size_t bufsize, ccp path1, ccp path2 );
+ccp PathCatDirP ( char * buf, ssize_t bufsize, ccp path1, ccp path2 );
// Same as PathCatPP*(), but use 'base' as prefix for relative paths.
// If 'base' is NULL (but not empty), use getcwd() instead.
// PathCatBufBP() and PathCatBP() are special: path can be part of buf
-char *PathCatBufBP ( char *buf, size_t bufsize, ccp base, ccp path );
-char *PathCatBufBPP ( char *buf, size_t bufsize, ccp base, ccp path1, ccp path2 );
-char *PathCatBufBPPE ( char *buf, size_t bufsize, ccp base, ccp path1, ccp path2, ccp ext );
-ccp PathCatBP ( char *buf, size_t bufsize, ccp base, ccp path );
-ccp PathCatBPP ( char *buf, size_t bufsize, ccp base, ccp path1, ccp path2 );
-ccp PathCatBPPE ( char *buf, size_t bufsize, ccp base, ccp path1, ccp path2, ccp ext );
+char *PathCatBufBP ( char *buf, ssize_t bufsize, ccp base, ccp path );
+char *PathCatBufBPP ( char *buf, ssize_t bufsize, ccp base, ccp path1, ccp path2 );
+char *PathCatBufBPPE ( char *buf, ssize_t bufsize, ccp base, ccp path1, ccp path2, ccp ext );
+ccp PathCatBP ( char *buf, ssize_t bufsize, ccp base, ccp path );
+ccp PathCatBPP ( char *buf, ssize_t bufsize, ccp base, ccp path1, ccp path2 );
+ccp PathCatBPPE ( char *buf, ssize_t bufsize, ccp base, ccp path1, ccp path2, ccp ext );
ccp PathAllocBP ( ccp base, ccp path );
ccp PathAllocBPP ( ccp base, ccp path1, ccp path2 );
ccp PathAllocBPPE ( ccp base, ccp path1, ccp path2, ccp ext );
@@ -1567,8 +1590,8 @@ char * PathCombineFast ( char *dest_buf, uint buf_size, ccp path, ccp base_path
// If ext==NULL or emtpy: remove only
// 'ext' may start with '.'. If not, a additional '.' is included
// If 'path' is NULL or path==buf: Inplace job using 'buf' as source.
-char * NewFileExtE ( char * buf, ccp buf_end, ccp path, ccp ext );
-char * NewFileExtS ( char * buf, size_t bufsize, ccp path, ccp ext );
+char * NewFileExtE ( char * buf, ccp buf_end, ccp path, ccp ext );
+char * NewFileExtS ( char * buf, ssize_t bufsize, ccp path, ccp ext );
// eliminate leading './' before comparing
int StrPathCmp ( ccp path1, ccp path2 );
diff --git a/project/dclib/dclib-file.c b/project/dclib/dclib-file.c
index d1f93da..44bf5ec 100644
--- a/project/dclib/dclib-file.c
+++ b/project/dclib/dclib-file.c
@@ -579,7 +579,7 @@ FileAttrib_t * ClearFileAttrib
dest->mtime.tv_nsec =
dest->ctime.tv_nsec =
dest->itime.tv_nsec =
- #ifdef UTIME_OMIT
+ #if SUPPORT_UTIMENSAT
UTIME_OMIT;
#else
-2;
@@ -775,7 +775,7 @@ int CompareTimeSpec0 ( const struct timespec *a, const struct timespec *b )
void SetAMTimes ( ccp fname, const struct timespec times[2] )
{
- #ifdef UTIME_OMIT
+ #if SUPPORT_UTIMENSAT
utimensat(AT_FDCWD,fname,times,0);
#else
struct timeval tv[2];
diff --git a/project/dclib/dclib-file.h b/project/dclib/dclib-file.h
index 92a3283..010e6b0 100644
--- a/project/dclib/dclib-file.h
+++ b/project/dclib/dclib-file.h
@@ -1625,7 +1625,7 @@ typedef struct PrintScript_t
int var_size; // if > 0: print size of var name (some 'fform' only)
int eq_tabstop; // if > 0: indent '=' to set tabstop (some 'fform' only)
LowerUpper_t force_case; // change case of var names if not LOUP_AUTO
- bool create_array; // true: create ar arrays
+ bool create_array; // true: create arrays
bool auto_quote; // true: detect quotes and use EscapeString()
bool add_index; // true: add index to varname
bool ena_empty; // true: enable empty lines
diff --git a/project/dclib/dclib-network.c b/project/dclib/dclib-network.c
index 9c350b9..b069ba2 100644
--- a/project/dclib/dclib-network.c
+++ b/project/dclib/dclib-network.c
@@ -3520,7 +3520,7 @@ int PrintBinary1TCPStream
return -1;
char buf[10000], *end_buf = buf + sizeof(buf) - 4;
- #if 0 // dcc12: throws error: buf may be used uninitialized
+ #if 0 // gcc-12: throws error: 'buf' may be used uninitialized
char *dest = StringCopyE(buf,end_buf,cmd);
#else
char *dest = StringCopyS(buf,sizeof(buf)-4,cmd);
@@ -3583,7 +3583,7 @@ int PrintBinary2TCPStream
return -1;
char buf[10000], *end_buf = buf + sizeof(buf) - 4;
- #if 0 // dcc12: throws error: buf may be used uninitialized
+ #if 0 // gcc-12: throws error: 'buf' may be used uninitialized
char *dest = StringCopyE(buf,end_buf,cmd);
#else
char *dest = StringCopyS(buf,sizeof(buf)-4,cmd);
diff --git a/project/dclib/dclib-ui.c b/project/dclib/dclib-ui.c
index b477d74..6a01793 100644
--- a/project/dclib/dclib-ui.c
+++ b/project/dclib/dclib-ui.c
@@ -254,13 +254,13 @@ enumError CheckEnvOptions ( ccp varname, check_opt_func func )
if ( !env || !*env )
return ERR_OK;
- TRACE("env[%s] = %s\n",varname,env);
+ PRINT("env[%s] = %s\n",varname,env);
#if 1 // [[new]] with ArgManager_t
-
ArgManager_t am = {0};
AppendArgManager(&am,ProgInfo.progname,0,false);
ScanQuotedArgManager(&am,env,true);
+
#ifdef DEBUG
for ( int i = 0; i < am.argc; i++ )
printf(" [%02u] |%s|\n",i,am.argv[i]);
diff --git a/project/dclib/dclib-utf8.c b/project/dclib/dclib-utf8.c
index 1ad06ce..e998ac7 100644
--- a/project/dclib/dclib-utf8.c
+++ b/project/dclib/dclib-utf8.c
@@ -1054,6 +1054,45 @@ char * PrintUTF8CharToCircBuf ( u32 code )
}
///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+exmem_t AlignUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec )
+{
+ int slen = str_len < 0
+ ? ScanUTF8Length(str)
+ : ScanUTF8LengthE(str,str+str_len);
+
+ if ( prec >= 0 && slen > prec )
+ slen = prec;
+
+ const int align_left = fw < 0;
+ if (align_left)
+ fw = -fw;
+ if ( fw < slen )
+ fw = slen;
+ int spaces = fw - slen;
+
+ ccp end = SkipUTF8Char(str,slen);
+ const int copy_len = end - str;
+
+ exmem_t res = GetExmemDestBuf(dest,copy_len+spaces);
+ char *buf = (char*)res.data.ptr;
+
+ DASSERT(buf);
+ if (align_left)
+ {
+ memcpy(buf,str,copy_len);
+ memset(buf+copy_len,' ',spaces);
+ }
+ else
+ {
+ memset(buf,' ',spaces);
+ memcpy(buf+spaces,str,copy_len);
+ }
+ return res;
+}
+
+///////////////////////////////////////////////////////////////////////////////
ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec )
{
@@ -1088,6 +1127,45 @@ ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec )
}
///////////////////////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////////////////////
+
+exmem_t AlignEUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec )
+{
+ int slen = str_len < 0
+ ? ScanUTF8Length(str)
+ : ScanUTF8LengthE(str,str+str_len);
+
+ if ( prec >= 0 && slen > prec )
+ slen = prec;
+
+ const int align_left = fw < 0;
+ if (align_left)
+ fw = -fw;
+ if ( fw < slen )
+ fw = slen;
+ int spaces = fw - slen;
+
+ ccp end = SkipEUTF8Char(str,slen);
+ const int copy_len = end - str;
+
+ exmem_t res = GetExmemDestBuf(dest,copy_len+spaces);
+ char *buf = (char*)res.data.ptr;
+
+ DASSERT(buf);
+ if (align_left)
+ {
+ memcpy(buf,str,copy_len);
+ memset(buf+copy_len,' ',spaces);
+ }
+ else
+ {
+ memset(buf,' ',spaces);
+ memcpy(buf+spaces,str,copy_len);
+ }
+ return res;
+}
+
+///////////////////////////////////////////////////////////////////////////////
ccp AlignEUTF8ToCircBuf ( ccp str, int fw, int prec )
{
diff --git a/project/dclib/dclib-utf8.h b/project/dclib/dclib-utf8.h
index 5236a4e..86556c5 100644
--- a/project/dclib/dclib-utf8.h
+++ b/project/dclib/dclib-utf8.h
@@ -36,7 +36,7 @@
#define DCLIB_UTF8_H 1
#ifndef WIN_DCLIB
-#include "dclib-types.h"
+#include "dclib-basics.h"
///////////////////////////////////////////////////////////////////////////////
///// this software is taken from dcLib2 and now publiced under GPL2. /////
@@ -113,10 +113,11 @@ int CalcUTF8PrintFW ( ccp str, ccp end, uint wanted_fw );
char * PrintUTF8Char ( char * buf, u32 code );
char * PrintUTF8CharToCircBuf ( u32 code );
+exmem_t AlignUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec );
ccp AlignUTF8ToCircBuf ( ccp str, int fw, int prec );
///////////////////////////////////////////////////////////////////////////////
-// special variants, that ignore known escape seqeuences
+// special variants, that ignore known escape sequences
char * NextEUTF8Char ( ccp str );
char * NextEUTF8CharE ( ccp str, ccp end );
@@ -125,6 +126,7 @@ char * SkipEUTF8CharE ( ccp str, ccp end, int skip );
int ScanEUTF8Length ( ccp str );
int ScanEUTF8LengthE ( ccp str, ccp end );
+exmem_t AlignEUTF8 ( exmem_dest_t *dest, ccp str, int str_len, int fw, int prec );
ccp AlignEUTF8ToCircBuf ( ccp str, int fw, int prec );
///////////////////////////////////////////////////////////////////////////////