OSDN Git Service

nc: add missing cast
authorDenis Vlasenko <vda.linux@googlemail.com>
Mon, 18 Dec 2006 22:10:24 +0000 (22:10 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Mon, 18 Dec 2006 22:10:24 +0000 (22:10 -0000)
xfuncs: add dprintf for dietlibc

include/platform.h
libbb/xfuncs.c
networking/nc.c

index a1ec17a..860143f 100644 (file)
@@ -194,6 +194,9 @@ typedef unsigned long long int  uintmax_t;
  * libbb.  This would require a platform.c.  It's not going to be cleaned
  * out of the tree, so stop saying it should be. */
 #define fdprintf dprintf
+#ifdef __dietlibc__
+int dprintf(int fd, const char *format, ...);
+#endif
 
 /* Don't use lchown with glibc older than 2.1.x ... uC-libc lacks it */
 #if (defined __GLIBC__ && __GLIBC__ <= 2 && __GLIBC_MINOR__ < 1) || \
index 313e328..4790aa1 100644 (file)
@@ -411,6 +411,37 @@ char *xasprintf(const char *format, ...)
        return string_ptr;
 }
 
+#ifdef __dietlibc__
+int dprintf(int fd, const char *format, ...)
+{
+       va_list p;
+       int r;
+       char *string_ptr;
+
+#if 1
+       // GNU extension
+       va_start(p, format);
+       r = vasprintf(&string_ptr, format, p);
+       va_end(p);
+#else
+       // Bloat for systems that haven't got the GNU extension.
+       va_start(p, format);
+       r = vsnprintf(NULL, 0, format, p);
+       va_end(p);
+       string_ptr = xmalloc(r+1);
+       va_start(p, format);
+       r = vsnprintf(string_ptr, r+1, format, p);
+       va_end(p);
+#endif
+
+       if (r >= 0) {
+               full_write(fd, string_ptr, r);
+               free(string_ptr);
+       }
+       return r;
+}
+#endif
+
 // Die with an error message if we can't copy an entire FILE * to stdout, then
 // close that file.
 void xprint_and_close_file(FILE *file)
index 5fd9242..b2a4596 100644 (file)
@@ -104,7 +104,7 @@ int nc_main(int argc, char **argv)
 
                        if (!lport) {
                                socklen_t len = sizeof(address);
-                               getsockname(sfd, &address, &len);
+                               getsockname(sfd, (struct sockaddr *) &address, &len);
                                fdprintf(2, "%d\n", SWAP_BE16(address.sin_port));
                        }
  repeatyness: