diff options
| author | 2009-05-31 09:16:50 +0000 | |
|---|---|---|
| committer | 2009-05-31 09:16:50 +0000 | |
| commit | 71d8b9891a55151b80e6b37e0fd1a8e75fa529d1 (patch) | |
| tree | c255d1b19a357b3e9230c4aba23ed40fc48a798e /gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c | |
| parent | indent (diff) | |
| download | wireguard-openbsd-71d8b9891a55151b80e6b37e0fd1a8e75fa529d1.tar.xz wireguard-openbsd-71d8b9891a55151b80e6b37e0fd1a8e75fa529d1.zip | |
Update to lynx-2.8.6.rel5, with our local patches maintained where relevant.
tests from miod@ sthen@ jmc@ jsing@
two additional fixes from miod:
- fix uninitialized stack variable use, leading to occasional crash.
- modify the socklen_t test to include <sys/types.h>, fixes gcc2 build failures
Diffstat (limited to 'gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c')
| -rw-r--r-- | gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c | 163 |
1 files changed, 90 insertions, 73 deletions
diff --git a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c index df667bef016..d560954c278 100644 --- a/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c +++ b/gnu/usr.bin/lynx/WWW/Library/Implementation/HTDOS.c @@ -9,28 +9,33 @@ #include <LYLeaks.h> +#ifdef _WINDOWS +#include <LYGlobalDefs.h> +#endif + /* * Make a copy of the source argument in the result, allowing some extra * space so we can append directly onto the result without reallocating. */ -PRIVATE char * copy_plus ARGS2(char **, result, CONST char *, source) +static char *copy_plus(char **result, const char *source) { int length = strlen(source); - HTSprintf0(result, "%-*s", length+10, source); + + HTSprintf0(result, "%-*s", length + 10, source); (*result)[length] = 0; return (*result); } /* PUBLIC HTDOS_wwwName() -** CONVERTS DOS Name into WWW Name -** ON ENTRY: -** dosname DOS file specification (NO NODE) -** -** ON EXIT: -** returns WWW file specification -** -*/ -char * HTDOS_wwwName ARGS1(CONST char *, dosname) + * CONVERTS DOS Name into WWW Name + * ON ENTRY: + * dosname DOS file specification (NO NODE) + * + * ON EXIT: + * returns WWW file specification + * + */ +const char *HTDOS_wwwName(const char *dosname) { static char *wwwname = NULL; char *cp_url = copy_plus(&wwwname, dosname); @@ -42,7 +47,7 @@ char * HTDOS_wwwName ARGS1(CONST char *, dosname) while ((ch = *dosname) != '\0') { switch (ch) { case '\\': - /* convert dos backslash to unix-style */ + /* convert dos backslash to unix-style */ *cp_url++ = '/'; break; case ' ': @@ -50,40 +55,39 @@ char * HTDOS_wwwName ARGS1(CONST char *, dosname) *cp_url++ = '2'; *cp_url++ = '0'; break; - default: + default: *cp_url++ = ch; break; - } - dosname++; + } + dosname++; } *cp_url = '\0'; #else - for ( ; *cp_url != '\0' ; cp_url++) - if(*cp_url == '\\') - *cp_url = '/'; /* convert dos backslash to unix-style */ + for (; *cp_url != '\0'; cp_url++) + if (*cp_url == '\\') + *cp_url = '/'; /* convert dos backslash to unix-style */ #endif wwwname_len = strlen(wwwname); if (wwwname_len > 1) - cp_url--; /* point last char */ + cp_url--; /* point last char */ if (wwwname_len > 3 && *cp_url == '/') { cp_url++; *cp_url = '\0'; } - return(wwwname); + return (wwwname); } - /* * Convert slashes from Unix to DOS */ -char * HTDOS_slashes ARGS1(char *, path) +char *HTDOS_slashes(char *path) { char *s; - for (s = path; *s != '\0'; ++s) { - if (*s == '/') { + for (s = path; *s != '\0'; ++s) { + if (*s == '/') { *s = '\\'; } } @@ -91,31 +95,27 @@ char * HTDOS_slashes ARGS1(char *, path) } /* PUBLIC HTDOS_name() -** CONVERTS WWW name into a DOS name -** ON ENTRY: -** wwwname WWW file name -** -** ON EXIT: -** returns DOS file specification -*/ -char * HTDOS_name ARGS1(char *, wwwname) + * CONVERTS WWW name into a DOS name + * ON ENTRY: + * wwwname WWW file name + * + * ON EXIT: + * returns DOS file specification + */ +char *HTDOS_name(char *wwwname) { -#ifdef _WINDOWS /* 1998/04/02 (Thu) 08:47:20 */ - extern char windows_drive[]; - char temp_buff[LY_MAXPATH]; -#endif static char *result = NULL; int joe; copy_plus(&result, wwwname); #ifdef __DJGPP__ if (result[0] == '/' - && result[1] == 'd' - && result[2] == 'e' - && result[3] == 'v' - && result[4] == '/' - && isalpha(result[5])) { - return(result); + && result[1] == 'd' + && result[2] == 'e' + && result[3] == 'v' + && result[4] == '/' + && isalpha(result[5])) { + return (result); } #endif /* __DJGPP__ */ @@ -123,16 +123,16 @@ char * HTDOS_name ARGS1(char *, wwwname) /* pesky leading slash, rudiment from file://localhost/ */ /* the rest of path may be with or without drive letter */ - if((result[1] != '\\') && (result[0] == '\\')) { - for (joe = 0; (result[joe] = result[joe+1]) != 0; joe++) - ; + if ((result[1] != '\\') && (result[0] == '\\')) { + for (joe = 0; (result[joe] = result[joe + 1]) != 0; joe++) ; } - -#ifdef _WINDOWS /* 1998/04/02 (Thu) 08:59:48 */ +#ifdef _WINDOWS /* 1998/04/02 (Thu) 08:59:48 */ if (LYLastPathSep(result) != NULL - && !LYIsDosDrive(result)) { + && !LYIsDosDrive(result)) { + char temp_buff[LY_MAXPATH]; + sprintf(temp_buff, "%.3s\\%.*s", windows_drive, - (int)(sizeof(temp_buff) - 5), result); + (int) (sizeof(temp_buff) - 5), result); StrAllocCopy(result, temp_buff); } #endif @@ -141,7 +141,7 @@ char * HTDOS_name ARGS1(char *, wwwname) * refers to the current directory on the given device. */ if (LYLastPathSep(result) == NULL - && LYIsDosDrive(result)) + && LYIsDosDrive(result)) LYAddPathSep0(result); CTRACE((tfp, "HTDOS_name changed `%s' to `%s'\n", wwwname, result)); @@ -149,7 +149,7 @@ char * HTDOS_name ARGS1(char *, wwwname) } #ifdef WIN_EX -PUBLIC char *HTDOS_short_name(char *path) +char *HTDOS_short_name(char *path) { static char sbuf[LY_MAXPATH]; char *ret; @@ -167,34 +167,45 @@ PUBLIC char *HTDOS_short_name(char *path) } #endif -#if defined(DJGPP) && defined(DJGPP_KEYHANDLER) -/* PUBLIC getxkey() -** Replaces libc's getxkey() with polling of tcp/ip -** library (WatTcp or Watt-32). This is required to -** be able to finish off dead sockets, answer pings etc. -** -** ON EXIT: -** returns extended keypress. -*/ - -/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ +#if defined(DJGPP) +/* + * Poll tcp/ip lib and yield to DPMI-host while nothing in + * keyboard buffer (head = tail) (simpler than kbhit). + * This is required to be able to finish off dead sockets, + * answer pings etc. + */ #include <pc.h> #include <dpmi.h> #include <libc/farptrgs.h> #include <go32.h> -int getxkey (void) +void djgpp_idle_loop(void) { - __dpmi_regs r; - - /* poll tcp/ip lib and yield to DPMI-host while nothing in - * keyboard buffer (head = tail) (simpler than kbhit). - */ - while (_farpeekw(_dos_ds, 0x41a) == _farpeekw(_dos_ds, 0x41c)) - { - tcp_tick (NULL); + while (_farpeekw(_dos_ds, 0x41a) == _farpeekw(_dos_ds, 0x41c)) { + tcp_tick(NULL); __dpmi_yield(); +#if defined(USE_SLANG) + if (SLang_input_pending(1)) + break; +#endif } +} + +/* PUBLIC getxkey() + * Replaces libc's getxkey() with polling of tcp/ip + * library (WatTcp or Watt-32). * + * ON EXIT: + * returns extended keypress. + */ + +/* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */ + +int getxkey(void) +{ +#if defined(DJGPP_KEYHANDLER) + __dpmi_regs r; + + djgpp_idle_loop(); r.h.ah = 0x10; __dpmi_int(0x16, &r); @@ -204,6 +215,12 @@ int getxkey (void) if (r.h.al == 0xe0) return 0x0200 | r.h.ah; return r.h.al; -} -#endif /* DJGPP && DJGPP_KEYHANDLER */ +#elif defined(USE_SLANG) + djgpp_idle_loop(); + return SLkp_getkey(); +#else + /* PDcurses uses myGetChar() in LYString.c */ +#endif +} +#endif /* DJGPP */ |
