diff options
| author | Wiimm <wiimm@wiimm.de> | 2022-08-06 16:20:07 +0200 |
|---|---|---|
| committer | Wiimm <wiimm@wiimm.de> | 2022-08-06 16:20:07 +0200 |
| commit | 7fad9e9383d01cce3ac17176404e1ab4e738736c (patch) | |
| tree | df39dd0616554ce9daa138f2e9778c88fbf9ac55 /project/dclib | |
| parent | 06ff18cd020779c226f7c25d22016e06b898f303 (diff) | |
SZS v2.28a.beta2
Diffstat (limited to '')
| -rw-r--r-- | project/dclib/dclib-basics.c | 113 | ||||
| -rw-r--r-- | project/dclib/dclib-basics.h | 105 | ||||
| -rw-r--r-- | project/dclib/dclib-file.c | 4 | ||||
| -rw-r--r-- | project/dclib/dclib-file.h | 2 | ||||
| -rw-r--r-- | project/dclib/dclib-network.c | 4 | ||||
| -rw-r--r-- | project/dclib/dclib-ui.c | 4 | ||||
| -rw-r--r-- | project/dclib/dclib-utf8.c | 78 | ||||
| -rw-r--r-- | project/dclib/dclib-utf8.h | 6 |
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 ); /////////////////////////////////////////////////////////////////////////////// |
