X-Git-Url: http://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Ftinfo%2Fwrite_entry.c;h=d205bdbe9725e91d2e4ce44c81e60ebcb1a11a52;hp=f55686fe11c1b9a1a422fc077903418198e86f08;hb=5da4544722decdeb2bfd0c7c4581af0ea62148f9;hpb=d545d5dd9889756f005fb63a843adb230b990493 diff --git a/ncurses/tinfo/write_entry.c b/ncurses/tinfo/write_entry.c index f55686fe..d205bdbe 100644 --- a/ncurses/tinfo/write_entry.c +++ b/ncurses/tinfo/write_entry.c @@ -50,7 +50,7 @@ #define TRACE_NUM(n) /* nothing */ #endif -MODULE_ID("$Id: write_entry.c,v 1.102 2018/02/11 20:24:28 Julien.Cristau Exp $") +MODULE_ID("$Id: write_entry.c,v 1.106 2018/06/23 21:35:06 tom Exp $") static int total_written; static int total_parts; @@ -171,7 +171,7 @@ make_db_root(const char *path) if ((rc = stat(path, &statbuf)) < 0) { rc = mkdir(path -#if !defined(__MINGW32__) +#if !defined(_WIN32) ,0777 #endif ); @@ -384,7 +384,9 @@ _nc_write_entry(TERMTYPE2 *const tp) } _nc_SPRINTF(filename, _nc_SLIMIT(sizeof(filename)) - LEAF_FMT "/%s", first_name[0], first_name); + LEAF_FMT "/%.*s", UChar(first_name[0]), + (int) (sizeof(filename) - LEAF_LEN - 2), + first_name); if (saved) first_name[limit2] = saved; @@ -796,7 +798,8 @@ _nc_write_object(TERMTYPE2 *tp, char *buffer, unsigned *offset, unsigned limit) #if NCURSES_XNAMES if (extended_object(tp)) { - unsigned extcnt = (unsigned) NUM_EXT_NAMES(tp); + unsigned ext_total = (unsigned) NUM_EXT_NAMES(tp); + unsigned ext_usage = ext_total; if (even_boundary(nextfree)) return (ERR); @@ -810,10 +813,16 @@ _nc_write_object(TERMTYPE2 *tp, char *buffer, unsigned *offset, unsigned limit) return (ERR); nextfree += compute_offsets(tp->ext_Names, - (size_t) extcnt, + (size_t) ext_total, offsets + tp->ext_Strings); TRACE_OUT(("after extended capnames, nextfree=%d", nextfree)); - strmax = tp->ext_Strings + extcnt; + strmax = tp->ext_Strings + ext_total; + for (i = 0; i < tp->ext_Strings; ++i) { + if (VALID_STRING(tp->Strings[i + STRCOUNT])) { + ext_usage++; + } + } + TRACE_OUT(("will write %u/%lu strings", ext_usage, (unsigned long) strmax)); /* * Write the extended header @@ -821,7 +830,7 @@ _nc_write_object(TERMTYPE2 *tp, char *buffer, unsigned *offset, unsigned limit) LITTLE_ENDIAN(buf + 0, tp->ext_Booleans); LITTLE_ENDIAN(buf + 2, tp->ext_Numbers); LITTLE_ENDIAN(buf + 4, tp->ext_Strings); - LITTLE_ENDIAN(buf + 6, strmax); + LITTLE_ENDIAN(buf + 6, ext_usage); LITTLE_ENDIAN(buf + 8, nextfree); TRACE_OUT(("WRITE extended-header @%d", *offset)); if (Write(buf, 10, 1) != 1) @@ -868,7 +877,7 @@ _nc_write_object(TERMTYPE2 *tp, char *buffer, unsigned *offset, unsigned limit) /* * Write the extended names */ - for (i = 0; i < extcnt; i++) { + for (i = 0; i < ext_total; i++) { TRACE_OUT(("WRITE ext_Names[%d]=%s", (int) i, tp->ext_Names[i])); if (!WRITE_STRING(tp->ext_Names[i])) return (ERR);