diff options
| author | Scarlett <scarlett@xavin.net> | 2015-01-15 09:54:54 +0000 | 
|---|---|---|
| committer | Tatsuya Kinoshita <tats@debian.org> | 2015-01-15 09:58:35 +0000 | 
| commit | ec8272d8fe937293212adb126ad1827a2640c36c (patch) | |
| tree | a52452e8c39f7ef0e09054e8bd1bb606e9ddba07 | |
| parent | Merge branch 'bug/changelog' (diff) | |
| download | w3m-ec8272d8fe937293212adb126ad1827a2640c36c.tar.gz w3m-ec8272d8fe937293212adb126ad1827a2640c36c.zip | |
Correct printf arguments and use asprintf
Origin: http://marc.info/?l=openbsd-ports&m=142090828929750&w=2
* Str.c: Use asprintf() instead of rolling our own printf string
length detection.
* cookie.c: Pass the char pointer in the string struct to printf %s
instead of the string struct itself.
Print time_t using %lld instead of %ld to allow for 64-bit time_t.
* main.c: Print a long int using the correct format specifier.
* map.c: Print size_t using the correct format specifier.
Diffstat (limited to '')
| -rw-r--r-- | Str.c | 116 | ||||
| -rw-r--r-- | cookie.c | 6 | ||||
| -rw-r--r-- | main.c | 2 | ||||
| -rw-r--r-- | map.c | 2 | 
4 files changed, 25 insertions, 101 deletions
| @@ -427,103 +427,27 @@ Stralign_center(Str s, int width)  Str  Sprintf(char *fmt, ...)  { -    int len = 0; -    int status = SP_NORMAL; -    int p = 0; -    char *f; -    Str s; -    va_list ap; - -    va_start(ap, fmt); -    for (f = fmt; *f; f++) { -      redo: -	switch (status) { -	case SP_NORMAL: -	    if (*f == '%') { -		status = SP_PREC; -		p = 0; -	    } -	    else -		len++; -	    break; -	case SP_PREC: -	    if (IS_ALPHA(*f)) { -		/* conversion char. */ -		double vd; -		int vi; -		char *vs; -		void *vp; - -		switch (*f) { -		case 'l': -		case 'h': -		case 'L': -		case 'w': -		    continue; -		case 'd': -		case 'i': -		case 'o': -		case 'x': -		case 'X': -		case 'u': -		    vi = va_arg(ap, int); -		    len += (p > 0) ? p : 10; -		    break; -		case 'f': -		case 'g': -		case 'e': -		case 'G': -		case 'E': -		    vd = va_arg(ap, double); -		    len += (p > 0) ? p : 15; -		    break; -		case 'c': -		    len += 1; -		    vi = va_arg(ap, int); -		    break; -		case 's': -		    vs = va_arg(ap, char *); -		    vi = strlen(vs); -		    len += (p > vi) ? p : vi; -		    break; -		case 'p': -		    vp = va_arg(ap, void *); -		    len += 10; -		    break; -		case 'n': -		    vp = va_arg(ap, void *); -		    break; -		} -		status = SP_NORMAL; -	    } -	    else if (IS_DIGIT(*f)) -		p = p * 10 + *f - '0'; -	    else if (*f == '.') -		status = SP_PREC2; -	    else if (*f == '%') { -		status = SP_NORMAL; -		len++; -	    } -	    break; -	case SP_PREC2: -	    if (IS_ALPHA(*f)) { -		status = SP_PREC; -		goto redo; -	    } -	    break; +	Str s; +	char *cb; +	int ret; +	size_t n; +	va_list ap; + +	va_start(ap, fmt); +	ret = vasprintf(&cb, fmt, ap); +	if (ret == -1) { +		fprintf(stderr, +		    "Sprintf: vasprintf failed\n"); +		exit(1);  	} -    } -    va_end(ap); -    s = Strnew_size(len * 2); -    va_start(ap, fmt); -    vsprintf(s->ptr, fmt, ap); -    va_end(ap); -    s->length = strlen(s->ptr); -    if (s->length > len * 2) { -	fprintf(stderr, "Sprintf: string too long\n"); -	exit(1); -    } -    return s; +	va_end(ap); + +	n = (size_t) ret + 1; +	s = Strnew_size(n); +	s->length = ret; +	memcpy(s->ptr, cb, n); +	free(cb); +	return s;  }  Str @@ -247,7 +247,7 @@ find_cookie(ParsedURL *pu)  		Strcat(tmp, Sprintf("; $Domain=\"%s\"", p1->domain->ptr));  	    if (p1->portl)  		Strcat(tmp, -		       Sprintf("; $Port=\"%s\"", portlist2str(p1->portl))); +		       Sprintf("; $Port=\"%s\"", portlist2str(p1->portl)->ptr));  	}      }      return tmp; @@ -461,9 +461,9 @@ save_cookies(void)      for (p = First_cookie; p; p = p->next) {  	if (!(p->flag & COO_USE) || p->flag & COO_DISCARD)  	    continue; -	fprintf(fp, "%s\t%s\t%s\t%ld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n", +	fprintf(fp, "%s\t%s\t%s\t%lld\t%s\t%s\t%d\t%d\t%s\t%s\t%s\n",  		parsedURL2Str(&p->url)->ptr, -		p->name->ptr, p->value->ptr, p->expires, +		p->name->ptr, p->value->ptr, (long long) p->expires,  		p->domain->ptr, p->path->ptr, p->flag,  		p->version, str2charp(p->comment),  		(p->portl) ? portlist2str(p->portl)->ptr : "", @@ -5841,7 +5841,7 @@ set_buffer_environ(Buffer *buf)  	    set_environ("W3M_CURRENT_FORM", form2str((FormItemList *)a->url));  	else  	    set_environ("W3M_CURRENT_FORM", ""); -	set_environ("W3M_CURRENT_LINE", Sprintf("%d", +	set_environ("W3M_CURRENT_LINE", Sprintf("%ld",  						l->real_linenumber)->ptr);  	set_environ("W3M_CURRENT_COLUMN", Sprintf("%d",  						  buf->currentColumn + @@ -573,7 +573,7 @@ page_info_panel(Buffer *buf)  		   "<tr valign=top><td nowrap>Number of lines<td>",  		   Sprintf("%d", all)->ptr,  		   "<tr valign=top><td nowrap>Transferred bytes<td>", -		   Sprintf("%d", buf->trbyte)->ptr, NULL); +		   Sprintf("%zu", buf->trbyte)->ptr, NULL);      a = retrieveCurrentAnchor(buf);      if (a != NULL) { | 
