# HG changeset patch # User Rob Landley # Date 1332202761 18000 # Node ID b2194045c40e7dc793f382cd2c48920d9552b703 # Parent 1f5bd8c93093bbf8e792b241af61043764a76fb9 Remove "feature test macros", replace non-portable fdprintf() with standard fprintf(). diff -r 1f5bd8c93093 -r b2194045c40e lib/lib.c --- a/lib/lib.c Fri Mar 16 06:42:08 2012 -0500 +++ b/lib/lib.c Mon Mar 19 19:19:21 2012 -0500 @@ -794,18 +794,21 @@ // This should use a raw tty, fixit later. int yesno(char *prompt, int def) { + FILE *fp = fopen("/dev/tty", "rw"); char buf; - int i; - for (i=0; i<3 && !isatty(i); i++); - if (i == 3) return 1; + if (!fp) return 1; - fdprintf(i, "%s (%c/%c):", prompt, def ? 'Y' : 'y', def ? 'n' : 'N'); - while (read(i, &buf, 1)) { - if (isspace(buf)) break; - if (tolower(buf) == 'y') return 1; - if (tolower(buf) == 'n') return 0; + fprintf(fp, "%s (%c/%c):", prompt, def ? 'Y' : 'y', def ? 'n' : 'N'); + while (fread(&buf, 1, 1, fp)) { + if (tolower(buf) == 'y') def = 1; + if (tolower(buf) == 'n') def = 0; + else if (!isspace(buf)) continue; + + break; } + fclose(fp); + return def; } diff -r 1f5bd8c93093 -r b2194045c40e lib/portability.h --- a/lib/portability.h Fri Mar 16 06:42:08 2012 -0500 +++ b/lib/portability.h Mon Mar 19 19:19:21 2012 -0500 @@ -9,13 +9,22 @@ #define _FILE_OFFSET_BITS 64 -#define _POSIX_C_SOURCE 200809L -#define _XOPEN_SOURCE 600 -#define _BSD_SOURCE -#define _SVID_SOURCE +#include + +//#define _POSIX_C_SOURCE 200809L +//#define _XOPEN_SOURCE 600 +//#define _BSD_SOURCE +//#define _SVID_SOURCE -#include -#define fdprintf(...) dprintf(__VA_ARGS__) +//#include +//#define fdprintf(...) dprintf(__VA_ARGS__) + +#ifdef __GLIBC__ +// An SUSv4 function that glibc refuses to #define without crazy #defines, +// see http://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html +#include +char *strptime(const char *buf, const char *format, struct tm *tm); +#endif #ifdef __GNUC__ #define noreturn __attribute__((noreturn)) diff -r 1f5bd8c93093 -r b2194045c40e toys/count.c --- a/toys/count.c Fri Mar 16 06:42:08 2012 -0500 +++ b/toys/count.c Mon Mar 19 19:19:21 2012 -0500 @@ -23,13 +23,14 @@ { uint64_t size = 0; int len; + char buf[32]; for (;;) { len = xread(0, toybuf, sizeof(toybuf)); if (!len) break; size += len; xwrite(1, toybuf, len); - fdprintf(2, "%"PRIu64" bytes\r", size); + xwrite(2, buf, sprintf(buf, "%"PRIu64" bytes\r", size)); } - fdprintf(2,"\n"); + xwrite(2, "\n", 1); } diff -r 1f5bd8c93093 -r b2194045c40e toys/patch.c --- a/toys/patch.c Fri Mar 16 06:42:08 2012 -0500 +++ b/toys/patch.c Mon Mar 19 19:19:21 2012 -0500 @@ -75,11 +75,15 @@ { struct double_list *dlist = (struct double_list *)data; - if (TT.state>1 && *dlist->data != TT.state) - fdprintf(TT.state == 2 ? 2 : TT.fileout, - "%s\n", dlist->data+(TT.state>3 ? 1 : 0)); + if (TT.state>1 && *dlist->data != TT.state) { + char *s = dlist->data+(TT.state>3 ? 1 : 0); + int i = TT.state == 2 ? 2 : TT.fileout; - if (PATCH_DEBUG) fdprintf(2, "DO %d: %s\n", TT.state, dlist->data); + xwrite(i, s, strlen(s)); + xwrite(i, "\n", 1); + } + + if (PATCH_DEBUG) fprintf(stderr, "DO %d: %s\n", TT.state, dlist->data); free(dlist->data); free(data); @@ -96,7 +100,8 @@ if (!TT.current_hunk) return; TT.current_hunk->prev->next = 0; - fdprintf(2, "Hunk %d FAILED %ld/%ld.\n", TT.hunknum, TT.oldline, TT.newline); + fprintf(stderr, "Hunk %d FAILED %ld/%ld.\n", + TT.hunknum, TT.oldline, TT.newline); toys.exitval = 1; // If we got to this point, we've seeked to the end. Discard changes to @@ -128,11 +133,11 @@ for (plist = TT.current_hunk; plist; plist = plist->next) { if (plist->data[0]==' ') matcheof++; else matcheof = 0; - if (PATCH_DEBUG) fdprintf(2, "HUNK:%s\n", plist->data); + if (PATCH_DEBUG) fprintf(stderr, "HUNK:%s\n", plist->data); } matcheof = matcheof < TT.context; - if (PATCH_DEBUG) fdprintf(2,"MATCHEOF=%c\n", matcheof ? 'Y' : 'N'); + if (PATCH_DEBUG) fprintf(stderr,"MATCHEOF=%c\n", matcheof ? 'Y' : 'N'); // Loop through input data searching for this hunk. Match all context // lines and all lines to be removed until we've found the end of a @@ -155,19 +160,19 @@ // Is this EOF? if (!data) { - if (PATCH_DEBUG) fdprintf(2, "INEOF\n"); + if (PATCH_DEBUG) fprintf(stderr, "INEOF\n"); // Does this hunk need to match EOF? if (!plist && matcheof) break; if (backwarn) - fdprintf(2,"Possibly reversed hunk %d at %ld\n", + fprintf(stderr, "Possibly reversed hunk %d at %ld\n", TT.hunknum, TT.linenum); // File ended before we found a place for this hunk. fail_hunk(); goto done; - } else if (PATCH_DEBUG) fdprintf(2, "IN: %s\n", data); + } else if (PATCH_DEBUG) fprintf(stderr, "IN: %s\n", data); check = dlist_add(&buf, data); // Compare this line with next expected line of hunk. @@ -186,7 +191,7 @@ // recheck remaining buffered data for a new match. if (PATCH_DEBUG) - fdprintf(2, "NOT: %s\n", plist->data); + fprintf(stderr, "NOT: %s\n", plist->data); TT.state = 3; check = llist_pop(&buf); @@ -204,7 +209,7 @@ check = buf; } else { if (PATCH_DEBUG) - fdprintf(2, "MAYBE: %s\n", plist->data); + fprintf(stderr, "MAYBE: %s\n", plist->data); // This line matches. Advance plist, detect successful match. plist = plist->next; if (!plist && !matcheof) goto out; @@ -257,7 +262,7 @@ if (strip || !patchlinenum++) { int len = strlen(patchline); if (patchline[len-1] == '\r') { - if (!strip) fdprintf(2, "Removing DOS newlines\n"); + if (!strip) fprintf(stderr, "Removing DOS newlines\n"); strip = 1; patchline[len-1]=0; }