summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Stenberg <daniel@haxx.se>2000-03-19 19:54:13 +0000
committerDaniel Stenberg <daniel@haxx.se>2000-03-19 19:54:13 +0000
commitff3fd842d8338feb5277a0450991c882dd4d84b2 (patch)
tree4d5f3cdb72dec4a29d80ed521db99c00f491c56f
parent35140201b5ad087e852444780eb8b322ee7749f0 (diff)
downloadgnurl-ff3fd842d8338feb5277a0450991c882dd4d84b2.tar.gz
gnurl-ff3fd842d8338feb5277a0450991c882dd4d84b2.tar.bz2
gnurl-ff3fd842d8338feb5277a0450991c882dd4d84b2.zip
Marco G. Salvagno's OS/2 fixes
-rw-r--r--lib/file.c4
-rw-r--r--lib/getpass.c6
-rw-r--r--lib/progress.c27
3 files changed, 35 insertions, 2 deletions
diff --git a/lib/file.c b/lib/file.c
index 99759f477..af966016b 100644
--- a/lib/file.c
+++ b/lib/file.c
@@ -118,10 +118,10 @@ UrgError file(struct UrlData *data, char *path, long *bytecountp)
int fd;
char *actual_path = curl_unescape(path);
-#ifdef WIN32
+#if defined(WIN32) || defined(__EMX__)
int i;
- /* change path separators from '/' to '\\' for Windows */
+ /* change path separators from '/' to '\\' for Windows and OS/2 */
for (i=0; actual_path[i] != '\0'; ++i)
if (actual_path[i] == '/')
actual_path[i] = '\\';
diff --git a/lib/getpass.c b/lib/getpass.c
index c0c7bf97b..4a87145ab 100644
--- a/lib/getpass.c
+++ b/lib/getpass.c
@@ -76,7 +76,9 @@ char *getpass(const char *prompt)
FILE *outfp;
static char buf[INPUT_BUFFER];
RETSIGTYPE (*sigint)();
+#ifndef __EMX__
RETSIGTYPE (*sigtstp)();
+#endif
size_t bytes_read;
int infd;
int outfd;
@@ -92,7 +94,11 @@ char *getpass(const char *prompt)
#endif
sigint = signal(SIGINT, SIG_IGN);
+ /* 20000318 mgs
+ * this is needed by the emx system, SIGTSTP is not a supported signal */
+#ifndef __EMX__
sigtstp = signal(SIGTSTP, SIG_IGN);
+#endif
if( (infp=fopen("/dev/tty", "r")) == NULL )
{
diff --git a/lib/progress.c b/lib/progress.c
index 4307be35e..1bd5b470c 100644
--- a/lib/progress.c
+++ b/lib/progress.c
@@ -48,6 +48,13 @@
#include <time.h>
#endif
+/* 20000318 mgs
+ * later we use _scrsize to determine the screen width, this emx library
+ * function needs stdlib.h to be included */
+#if defined(__EMX__)
+#include <stdlib.h>
+#endif
+
#include <curl/curl.h>
#include "urldata.h"
@@ -365,6 +372,11 @@ static int width = 0;
void ProgressInit(struct UrlData *data, int max/*, int options, int moremax*/)
{
+#ifdef __EMX__
+ /* 20000318 mgs */
+ int scr_size [2];
+#endif
+
if(data->conf&(CONF_NOPROGRESS|CONF_MUTE))
return;
@@ -372,10 +384,25 @@ void ProgressInit(struct UrlData *data, int max/*, int options, int moremax*/)
/* TODO: get terminal width through ansi escapes or something similar.
try to update width when xterm is resized... - 19990617 larsa */
+#ifndef __EMX__
+ /* 20000318 mgs
+ * OS/2 users most likely won't have this env var set, and besides that
+ * we're using our own way to determine screen width */
if (curl_GetEnv("COLUMNS") != NULL)
width = atoi(curl_GetEnv("COLUMNS"));
else
width = 79;
+#else
+ /* 20000318 mgs
+ * We use this emx library call to get the screen width, and subtract
+ * one from what we got in order to avoid a problem with the cursor
+ * advancing to the next line if we print a string that is as long as
+ * the screen is wide. */
+
+ _scrsize(scr_size);
+ width = scr_size[0] - 1;
+#endif
+
progressmax = max;
if(-1 == max)