diff options
Diffstat (limited to 'ncurses/tinfo/write_entry.c')
| -rw-r--r-- | ncurses/tinfo/write_entry.c | 82 |
1 files changed, 36 insertions, 46 deletions
diff --git a/ncurses/tinfo/write_entry.c b/ncurses/tinfo/write_entry.c index a86c11267e931..b53bb210230d7 100644 --- a/ncurses/tinfo/write_entry.c +++ b/ncurses/tinfo/write_entry.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2009,2010 Free Software Foundation, Inc. * + * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * * * * Permission is hereby granted, free of charge, to any person obtaining a * * copy of this software and associated documentation files (the * @@ -42,6 +42,7 @@ #include <sys/stat.h> #include <tic.h> +#include <term_entry.h> #ifndef S_ISDIR #define S_ISDIR(mode) ((mode & S_IFMT) == S_IFDIR) @@ -53,7 +54,7 @@ #define TRACE_OUT(p) /*nothing */ #endif -MODULE_ID("$Id: write_entry.c,v 1.78 2010/12/25 23:23:08 tom Exp $") +MODULE_ID("$Id: write_entry.c,v 1.72 2008/08/03 19:24:00 tom Exp $") static int total_written; @@ -136,12 +137,10 @@ make_db_path(char *dst, const char *src, unsigned limit) if (_nc_is_dir_path(dst)) { rc = -1; } else { - static const char suffix[] = DBM_SUFFIX; unsigned have = strlen(dst); - unsigned need = strlen(suffix); - if (have > need && strcmp(dst + have - need, suffix)) { - if (have + need <= limit) - strcat(dst, suffix); + if (have > 3 && strcmp(dst + have - 3, DBM_SUFFIX)) { + if (have + 3 <= limit) + strcat(dst, DBM_SUFFIX); else rc = -1; } @@ -172,11 +171,7 @@ make_db_root(const char *path) struct stat statbuf; if ((rc = stat(path, &statbuf)) < 0) { - rc = mkdir(path -#if !defined(__MINGW32__) - ,0777 -#endif - ); + rc = mkdir(path, 0777); } else if (_nc_access(path, R_OK | W_OK | X_OK) < 0) { rc = -1; /* permission denied */ } else if (!(S_ISDIR(statbuf.st_mode))) { @@ -343,7 +338,6 @@ _nc_write_entry(TERMTYPE *const tp) while (*other_names != '\0') { ptr = other_names++; - assert(ptr < buffer + sizeof(buffer) - 1); while (*other_names != '|' && *other_names != '\0') other_names++; @@ -363,7 +357,7 @@ _nc_write_entry(TERMTYPE *const tp) start_time = 0; } - if (strlen(first_name) >= sizeof(filename) - (2 + LEAF_LEN)) + if (strlen(first_name) >= sizeof(filename) - 3) _nc_warning("terminal name too long."); sprintf(filename, LEAF_FMT "/%s", first_name[0], first_name); @@ -391,13 +385,14 @@ _nc_write_entry(TERMTYPE *const tp) } while (*other_names != '\0') { ptr = other_names++; + assert(ptr < buffer + sizeof(buffer) - 1); while (*other_names != '|' && *other_names != '\0') other_names++; if (*other_names != '\0') *(other_names++) = '\0'; - if (strlen(ptr) > sizeof(linkname) - (2 + LEAF_LEN)) { + if (strlen(ptr) > sizeof(linkname) - 3) { _nc_warning("terminal alias %s too long.", ptr); continue; } @@ -419,12 +414,8 @@ _nc_write_entry(TERMTYPE *const tp) { int code; #if USE_SYMLINKS - if (first_name[0] == linkname[0]) - strncpy(symlinkname, first_name, sizeof(symlinkname) - 1); - else { - strcpy(symlinkname, "../"); - strncat(symlinkname, filename, sizeof(symlinkname) - 4); - } + strcpy(symlinkname, "../"); + strncat(symlinkname, filename, sizeof(symlinkname) - 4); symlinkname[sizeof(symlinkname) - 1] = '\0'; #endif /* USE_SYMLINKS */ #if HAVE_REMOVE @@ -469,26 +460,26 @@ _nc_write_entry(TERMTYPE *const tp) #endif /* USE_HASHED_DB */ } -static size_t +static unsigned fake_write(char *dst, unsigned *offset, - size_t limit, + unsigned limit, char *src, - size_t want, - size_t size) + unsigned want, + unsigned size) { - size_t have = (limit - *offset); + int have = (limit - *offset); want *= size; if (have > 0) { - if (want > have) + if ((int) want > have) want = have; memcpy(dst + *offset, src, want); - *offset += (unsigned) want; + *offset += want; } else { want = 0; } - return (want / size); + return (int) (want / size); } #define Write(buf, size, count) fake_write(buffer, offset, limit, (char *) buf, count, size) @@ -496,16 +487,15 @@ fake_write(char *dst, #undef LITTLE_ENDIAN /* BSD/OS defines this as a feature macro */ #define HI(x) ((x) / 256) #define LO(x) ((x) % 256) -#define LITTLE_ENDIAN(p, x) (p)[0] = (unsigned char)LO(x), \ - (p)[1] = (unsigned char)HI(x) +#define LITTLE_ENDIAN(p, x) (p)[0] = LO(x), (p)[1] = HI(x) #define WRITE_STRING(str) (Write(str, sizeof(char), strlen(str) + 1) == strlen(str) + 1) static int -compute_offsets(char **Strings, size_t strmax, short *offsets) +compute_offsets(char **Strings, unsigned strmax, short *offsets) { - int nextfree = 0; - size_t i; + size_t nextfree = 0; + unsigned i; for (i = 0; i < strmax; i++) { if (Strings[i] == ABSENT_STRING) { @@ -513,8 +503,8 @@ compute_offsets(char **Strings, size_t strmax, short *offsets) } else if (Strings[i] == CANCELLED_STRING) { offsets[i] = -2; } else { - offsets[i] = (short) nextfree; - nextfree += (int) strlen(Strings[i]) + 1; + offsets[i] = nextfree; + nextfree += strlen(Strings[i]) + 1; TRACE_OUT(("put Strings[%d]=%s(%d)", (int) i, _nc_visbuf(Strings[i]), (int) nextfree)); } @@ -523,9 +513,9 @@ compute_offsets(char **Strings, size_t strmax, short *offsets) } static void -convert_shorts(unsigned char *buf, short *Numbers, size_t count) +convert_shorts(unsigned char *buf, short *Numbers, unsigned count) { - size_t i; + unsigned i; for (i = 0; i < count; i++) { if (Numbers[i] == ABSENT_NUMERIC) { /* HI/LO won't work */ buf[2 * i] = buf[2 * i + 1] = 0377; @@ -534,7 +524,7 @@ convert_shorts(unsigned char *buf, short *Numbers, size_t count) buf[2 * i + 1] = 0377; } else { LITTLE_ENDIAN(buf + 2 * i, Numbers[i]); - TRACE_OUT(("put Numbers[%u]=%d", (unsigned) i, Numbers[i])); + TRACE_OUT(("put Numbers[%d]=%d", i, Numbers[i])); } } } @@ -546,8 +536,8 @@ convert_shorts(unsigned char *buf, short *Numbers, size_t count) static unsigned extended_Booleans(TERMTYPE *tp) { - unsigned result = 0; - unsigned i; + unsigned short result = 0; + unsigned short i; for (i = 0; i < tp->ext_Booleans; ++i) { if (tp->Booleans[BOOLCOUNT + i] == TRUE) @@ -559,8 +549,8 @@ extended_Booleans(TERMTYPE *tp) static unsigned extended_Numbers(TERMTYPE *tp) { - unsigned result = 0; - unsigned i; + unsigned short result = 0; + unsigned short i; for (i = 0; i < tp->ext_Numbers; ++i) { if (tp->Numbers[NUMCOUNT + i] != ABSENT_NUMERIC) @@ -577,7 +567,7 @@ extended_Strings(TERMTYPE *tp) for (i = 0; i < tp->ext_Strings; ++i) { if (tp->Strings[STRCOUNT + i] != ABSENT_STRING) - result = (unsigned short) (i + 1); + result = (i + 1); } return result; } @@ -607,7 +597,7 @@ write_object(TERMTYPE *tp, char *buffer, unsigned *offset, unsigned limit) size_t namelen, boolmax, nummax, strmax; char zero = '\0'; size_t i; - int nextfree; + short nextfree; short offsets[MAX_ENTRY_SIZE / 2]; unsigned char buf[MAX_ENTRY_SIZE]; unsigned last_bool = BOOLWRITE; @@ -700,7 +690,7 @@ write_object(TERMTYPE *tp, char *buffer, unsigned *offset, unsigned limit) #if NCURSES_XNAMES if (extended_object(tp)) { - unsigned extcnt = (unsigned) NUM_EXT_NAMES(tp); + unsigned extcnt = NUM_EXT_NAMES(tp); if (even_boundary(nextfree)) return (ERR); |
