Added -N, added a strdup() function for systems without it. suggested for

Ultrix by Damien Adant <dams@usa.net>.
This commit is contained in:
Daniel Stenberg 2000-03-02 23:06:34 +00:00
parent 8ddd89a323
commit b0936b8007
1 changed files with 35 additions and 1 deletions

View File

@ -67,6 +67,25 @@
#include <unistd.h> #include <unistd.h>
#endif #endif
#ifndef HAVE_STRDUP
/* Ultrix doesn't have strdup(), so make a quick clone: */
char *strdup(char *str)
{
int len;
char *newstr;
len = strlen(str);
newstr = (char *) malloc((len+1)*sizeof(char));
if (!newstr)
return (char *)NULL;
strcpy(newstr,str);
return newstr;
}
#endif
extern void hugehelp(void); extern void hugehelp(void);
static void helpf(char *fmt, ...) static void helpf(char *fmt, ...)
@ -109,6 +128,7 @@ static void help(void)
" -m/--max-time <seconds> Maximum time allowed for the transfer\n" " -m/--max-time <seconds> Maximum time allowed for the transfer\n"
" -M/--manual Display huge help text\n" " -M/--manual Display huge help text\n"
" -n/--netrc Read .netrc for user name and password\n" " -n/--netrc Read .netrc for user name and password\n"
" -N/--no-buffer Disables the buffering of the output stream\n"
" -o/--output <file> Write output to <file> instead of stdout\n" " -o/--output <file> Write output to <file> instead of stdout\n"
" -O/--remote-name Write output to a file named as the remote file\n" " -O/--remote-name Write output to a file named as the remote file\n"
#if 0 #if 0
@ -177,6 +197,7 @@ struct Configurable {
char *cookiefile; char *cookiefile;
char *customrequest; char *customrequest;
bool progressmode; bool progressmode;
bool nobuffer;
char *writeout; /* %-styled format string to output */ char *writeout; /* %-styled format string to output */
@ -288,6 +309,7 @@ static int getparameter(char *flag, /* f or -long-flag */
{"m", "max-time", TRUE}, {"m", "max-time", TRUE},
{"M", "manual", FALSE}, {"M", "manual", FALSE},
{"n", "netrc", FALSE}, {"n", "netrc", FALSE},
{"N", "no-buffer", FALSE},
{"o", "output", TRUE}, {"o", "output", TRUE},
{"O", "remote-name", FALSE}, {"O", "remote-name", FALSE},
#if 0 #if 0
@ -573,6 +595,10 @@ static int getparameter(char *flag, /* f or -long-flag */
automatically enfore user+password with the request */ automatically enfore user+password with the request */
config->conf ^= CONF_NETRC; config->conf ^= CONF_NETRC;
break; break;
case 'N':
/* disable the output I/O buffering */
config->nobuffer ^= 1;
break;
case 'o': case 'o':
/* output file */ /* output file */
GetStr(&config->outfile, nextarg); /* write to this file */ GetStr(&config->outfile, nextarg); /* write to this file */
@ -806,6 +832,9 @@ struct OutStruct {
FILE *stream; FILE *stream;
}; };
/* having this global is a bit dirty, but hey, who said we weren't? ;-) */
struct Configurable config;
int my_fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream) int my_fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream)
{ {
struct OutStruct *out=(struct OutStruct *)stream; struct OutStruct *out=(struct OutStruct *)stream;
@ -814,6 +843,12 @@ int my_fwrite(void *buffer, size_t size, size_t nmemb, FILE *stream)
out->stream=fopen(out->filename, "wb"); out->stream=fopen(out->filename, "wb");
if(!out->stream) if(!out->stream)
return -1; /* failure */ return -1; /* failure */
if(config.nobuffer) {
/* disable output buffering */
#ifdef HAVE_SETVBUF
setvbuf(out->stream, NULL, _IONBF, 0);
#endif
}
} }
return fwrite(buffer, size, nmemb, out->stream); return fwrite(buffer, size, nmemb, out->stream);
} }
@ -841,7 +876,6 @@ int main(int argc, char *argv[])
int res=URG_OK; int res=URG_OK;
int i; int i;
struct Configurable config;
outs.stream = stdout; outs.stream = stdout;