Re: [dev] [9base] sync with 9front

From: Anselm R Garbe <garbeam_AT_gmail.com>
Date: Thu, 1 Nov 2012 09:25:43 +0100

Hi sl,

your patch does not cleanly apply to 9base tip.

[anselm_AT_x121e 9base]$ patch -p1 < /h/s
patching file Makefile
Hunk #1 FAILED at 57.
1 out of 1 hunk FAILED -- saving rejects to file Makefile.rej
patching file TODO
patching file date/date.1
patching file date/date.c
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 21.
2 out of 2 hunks FAILED -- saving rejects to file date/date.c.rej
patching file fmt/fmt.c
Hunk #1 FAILED at 12.
Hunk #2 FAILED at 84.
Hunk #3 FAILED at 104.
Hunk #4 FAILED at 175.
4 out of 4 hunks FAILED -- saving rejects to file fmt/fmt.c.rej
patching file urlencode/Makefile
patching file urlencode/urlencode.1
patching file urlencode/urlencode.c

Also please resubmit your patch as a separate file and not as mail inline text.

Thanks in advance,
Anselm

On 26 October 2012 08:45, <sl_AT_9front.org> wrote:
> diff -r 307800d4a01f Makefile
> --- a/Makefile Mon Jul 02 21:52:15 2012 +0200
> +++ b/Makefile Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -57,6 +57,7 @@
> unicode\
> uniq\
> unutf\
> + urlencode\
> wc
>
> all:
> diff -r 307800d4a01f TODO
> --- a/TODO Mon Jul 02 21:52:15 2012 +0200
> +++ b/TODO Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -1,6 +1,5 @@
> Missing commands:
>
> -* ssam (script in p9p/bin/ssam)
> -* rm
> +* file (from 9front)
> * cp (also missing from p9p too)
> * mv (also missing from p9p too)
> diff -r 307800d4a01f date/date.1
> --- a/date/date.1 Mon Jul 02 21:52:15 2012 +0200
> +++ b/date/date.1 Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -24,6 +24,12 @@
> .B -n
> Report the date as the number of seconds since the
> epoch, 00:00:00 GMT, January 1, 1970.
> +.TP
> +.B -i
> +Report the date as ISO-8601 without time and timezone suffix.
> +.TP
> +.B -t
> +Report the date as ISO-8601 with time and timezone suffix.
> .PP
> The conversion from Greenwich Mean Time to local time depends on the
> .B $timezone
> _AT_@ -49,10 +55,5 @@
> .\" into
> .\" .BR /env/timezone .
> .\" .PD
> -.\" .PP
> -.\" .I Clock
> -.\" draws a simple analog clock in its window.
> .SH SOURCE
> -.B \*9/src/cmd/date.c
> -.\" .br
> -.\" .B \*9/src/cmd/draw/clock.c
> +.B \*9/src/date/date.c
> diff -r 307800d4a01f date/date.c
> --- a/date/date.c Mon Jul 02 21:52:15 2012 +0200
> +++ b/date/date.c Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -1,17 +1,54 @@
> #include <u.h>
> #include <libc.h>
>
> -int uflg, nflg;
> +int uflg, nflg, iflg, tflg;
> +
> +char*
> +isodate(Tm *t)
> +{
> + static char c[25]; /* leave room to append isotime */
> + snprint(c, 11, "%04d-%02d-%02d",
> + t->year + 1900, t->mon + 1, t->mday);
> + return c;
> +}
> +
> +char*
> +isotime(Tm *t)
> +{
> + int tz;
> + char *c, *d;
> + d = isodate(t);
> + c = d+10;
> + snprint(c, 10, "T%02d:%02d:%02d",
> + t->hour, t->min, t->sec); /* append to isodate */
> + tz = t->tzoff / 60;
> + if(t->tzoff) {
> + /* localtime */
> + if (t->tzoff > 0) {
> + c[9] = '+';
> + } else {
> + c[9] = '-';
> + tz = -tz;
> + }
> + snprint(c+10, 5, "%02d%02d", tz / 60, tz % 60);
> + } else {
> + c[9] = 'Z';
> + c[10] = 0;
> + }
> + return d;
> +}
>
> void
> main(int argc, char *argv[])
> {
> ulong now;
> -
> + Tm *tm;
> ARGBEGIN{
> case 'n': nflg = 1; break;
> case 'u': uflg = 1; break;
> - default: fprint(2, "usage: date [-un] [seconds]\n"); exits("usage");
> + case 't': tflg = 1; /* implies -i */
> + case 'i': iflg = 1; break;
> + default: fprint(2, "usage: date [-itun] [seconds]\n"); exits("usage");
> }ARGEND
>
> if(argc == 1)
> _AT_@ -21,10 +58,15 @@
>
> if(nflg)
> print("%ld\n", now);
> - else if(uflg)
> - print("%s", asctime(gmtime(now)));
> - else
> - print("%s", ctime(now));
> -
> + else {
> + tm = uflg ? gmtime(now) : localtime(now);
> + if(iflg) {
> + if(tflg)
> + print("%s\n", isotime(tm));
> + else
> + print("%s\n", isodate(tm));
> + } else
> + print("%s", asctime(tm));
> + }
> exits(0);
> }
> diff -r 307800d4a01f fmt/fmt.c
> --- a/fmt/fmt.c Mon Jul 02 21:52:15 2012 +0200
> +++ b/fmt/fmt.c Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -12,14 +12,19 @@
> int length = 70; /* how many columns per output line */
> int join = 1; /* can lines be joined? */
> int maxtab = 8;
> +
> Biobuf bin;
> Biobuf bout;
>
> typedef struct Word Word;
> -struct Word{
> - int bol;
> +struct Word
> +{
> + Word *next;
> +
> int indent;
> - char text[1];
> + int length;
> + char bol;
> + char text[];
> };
>
> void fmt(void);
> _AT_@ -84,17 +89,14 @@
> }
>
> int
> -indentof(char **linep)
> +indentof(char *s)
> {
> - int i, ind;
> - char *line;
> + int ind;
>
> ind = 0;
> - line = *linep;
> - for(i=0; line[i]; i++)
> - switch(line[i]){
> + for(; *s != '\0'; s++)
> + switch(*s){
> default:
> - *linep = line;
> return ind;
> case ' ':
> ind++;
> _AT_@ -104,53 +106,65 @@
> ind -= ind%maxtab;
> break;
> }
> -
> +
> /* plain white space doesn't change the indent */
> - *linep = "";
> return indent;
> }
>
> -Word**
> -addword(Word **words, int *nwordp, char *s, int l, int indent, int bol)
> +Word*
> +newword(char *s, int n, int ind, int bol)
> {
> Word *w;
>
> - w = malloc(sizeof(Word)+l+1);
> - memmove(w->text, s, l);
> - w->text[l] = '\0';
> - w->indent = indent;
> + w = malloc(sizeof(Word) + n+1);
> + w->next = nil;
> + w->indent = ind;
> w->bol = bol;
> - words = realloc(words, (*nwordp+1)*sizeof(Word*));
> - words[(*nwordp)++] = w;
> - return words;
> + memmove(w->text, s, n);
> + w->text[n] = 0;
> + w->length = utflen(w->text);
> + return w;
> }
>
> -Word**
> -parseline(char *line, Word **words, int *nwordp)
> +Word*
> +getword(void)
> {
> - int ind, l, bol;
> -
> - ind = indentof(&line);
> - indent = ind;
> - bol = 1;
> + static Word *head, *tail;
> + char *line, *s;
> + Word *w;
> +
> + w = head;
> + if(w != nil){
> + head = w->next;
> + return w;
> + }
> + line = Brdstr(&bin, '\n', 1);
> + if(line == nil)
> + return nil;
> + tail = nil;
> + indent = indentof(line);
> for(;;){
> - /* find next word */
> - while(*line==' ' || *line=='\t')
> + while(*line == ' ' || *line == '\t')
> line++;
> if(*line == '\0'){
> - if(bol)
> - return addword(words, nwordp, "", 0, -1, bol);
> + if(head == nil)
> + return newword("", 0, -1, 1);
> break;
> }
> /* how long is this word? */
> - for(l=0; line[l]; l++)
> - if(line[l]==' ' || line[l]=='\t')
> + for(s=line++; *line != '\0'; line++)
> + if(*line==' ' || *line=='\t')
> break;
> - words = addword(words, nwordp, line, l, indent, bol);
> - bol = 0;
> - line += l;
> + w = newword(s, line-s, indent, head==nil);
> + if(head == nil)
> + head = w;
> + else
> + tail->next = w;
> + tail = w;
> }
> - return words;
> + w = head;
> + head = w->next;
> + return w;
> }
>
> void
> _AT_@ -175,67 +189,52 @@
> n = strlen(s);
> if(n < 2)
> return 1;
> - if(isupper((uchar)s[0]) && n < 4)
> + if(isupper(s[0]) && n < 4)
> return 1;
> if(strchr(".!?", s[n-1]) != nil)
> return 2;
> return 1;
> }
> -
> -
> -void
> -printwords(Word **w, int nw)
> -{
> - int i, j, n, col, nsp;
> -
> - /* one output line per loop */
> - for(i=0; i<nw; ){
> - /* if it's a blank line, print it */
> - if(w[i]->indent == -1){
> - Bputc(&bout, '\n');
> - if(++i == nw) /* out of words */
> - break;
> - }
> - /* emit leading indent */
> - col = extraindent+w[i]->indent;
> - printindent(col);
> - /* emit words until overflow; always emit at least one word */
> - for(n=0;; n++){
> - Bprint(&bout, "%s", w[i]->text);
> - col += utflen(w[i]->text);
> - if(++i == nw)
> - break; /* out of words */
> - if(w[i]->indent != w[i-1]->indent)
> - break; /* indent change */
> - nsp = nspaceafter(w[i-1]->text);
> - if(col+nsp+utflen(w[i]->text) > extraindent+length)
> - break; /* fold line */
> - if(!join && w[i]->bol)
> - break;
> - for(j=0; j<nsp; j++)
> - Bputc(&bout, ' '); /* emit space; another word will follow */
> - col += nsp;
> - }
> - /* emit newline */
> - Bputc(&bout, '\n');
> - }
> -}
>
> void
> fmt(void)
> {
> - char *s;
> - int i, nw;
> - Word **w;
> + Word *w, *o;
> + int col, nsp;
>
> - nw = 0;
> - w = nil;
> - while((s = Brdstr(&bin, '\n', 1)) != nil){
> - w = parseline(s, w, &nw);
> - free(s);
> + w = getword();
> + while(w != nil){
> + if(w->indent == -1){
> + Bputc(&bout, '\n');
> + free(w);
> + w = getword();
> + if(w == nil)
> + break;
> + }
> + col = w->indent;
> + printindent(extraindent+col);
> + /* emit words until overflow; always emit at least one word */
> + for(;;){
> + Bprint(&bout, "%s", w->text);
> + col += w->length;
> + o = w;
> + w = getword();
> + if(w == nil)
> + break;
> + if(w->indent != o->indent)
> + break; /* indent change */
> + nsp = nspaceafter(o->text);
> + if(col+nsp+w->length > length)
> + break; /* fold line */
> + if(!join && w->bol)
> + break;
> + while(--nsp >= 0){
> + Bputc(&bout, ' '); /* emit space; another word will follow */
> + col++;
> + }
> + free(o);
> + }
> + free(o);
> + Bputc(&bout, '\n');
> }
> - printwords(w, nw);
> - for(i=0; i<nw; i++)
> - free(w[i]);
> - free(w);
> }
> diff -r 307800d4a01f urlencode/Makefile
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/urlencode/Makefile Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -0,0 +1,10 @@
> +# urlencode - url encode and decode files
> +# Depends on ../lib9
> +
> +TARG = urlencode
> +
> +include ../std.mk
> +
> +pre-uninstall:
> +
> +post-install:
> diff -r 307800d4a01f urlencode/urlencode.1
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/urlencode/urlencode.1 Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -0,0 +1,20 @@
> +.TH URLENCODE 1
> +.SH NAME
> +urlencode \- URL encode and decode files
> +.SH SYNOPSIS
> +.B urlencode
> +[
> +.B -d
> +] [
> +.I file
> +]
> +.SH DESCRIPTION
> +.I Urlencode
> +is a helper program to URL encode and decode files. The
> +.B -d
> +flag insead of encoding, decodes URL encoded file. If no
> +.I file
> +is given, standard input is read. The resulting data
> +is written to standard output.
> +.SH SOURCE
> +.B \*9/src/urlencode/urlencode.c
> diff -r 307800d4a01f urlencode/urlencode.c
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/urlencode/urlencode.c Fri Oct 26 06:42:06 2012 +0000
> _AT_@ -0,0 +1,103 @@
> +#include <u.h>
> +#include <libc.h>
> +#include <bio.h>
> +
> +Biobuf bin;
> +Biobuf bout;
> +int dflag;
> +
> +char hex[] = "0123456789abcdef";
> +char Hex[] = "0123456789ABCDEF";
> +
> +int
> +hexdigit(int c)
> +{
> + char *p;
> +
> + if(c > 0){
> + if((p = strchr(Hex, c)) != 0)
> + return p - Hex;
> + if((p = strchr(hex, c)) != 0)
> + return p - hex;
> + }
> + return -1;
> +}
> +
> +void
> +usage(void)
> +{
> + fprint(2, "Usage: %s [ -d ] [ file ]\n", argv0);
> + exits("usage");
> +}
> +
> +void
> +main(int argc, char *argv[])
> +{
> + int c;
> +
> + ARGBEGIN {
> + case 'd':
> + dflag = 1;
> + break;
> + default:
> + usage();
> + } ARGEND;
> +
> + if(argc == 1){
> + int fd;
> +
> + fd = open(*argv, OREAD);
> + if(fd < 0)
> + sysfatal("%r");
> + if(fd != 0) dup(fd, 0);
> + } else if(argc > 1)
> + usage();
> +
> + Binit(&bin, 0, OREAD);
> + Binit(&bout, 1, OWRITE);
> +
> + if(dflag){
> + while((c = Bgetc(&bin)) >= 0){
> + if(c == '%'){
> + int c1, c2, x1, x2;
> +
> + if((c1 = Bgetc(&bin)) < 0)
> + break;
> + if((x1 = hexdigit(c1)) < 0){
> + Bungetc(&bin);
> + Bputc(&bout, c);
> + continue;
> + }
> + if((c2 = Bgetc(&bin)) < 0)
> + break;
> + if((x2 = hexdigit(c2)) < 0){
> + Bungetc(&bin);
> + Bputc(&bout, c);
> + Bputc(&bout, c1);
> + continue;
> + }
> + c = x1<<4 | x2;
> + } else if(c == '+')
> + c = ' ';
> + Bputc(&bout, c);
> + }
> + } else {
> + while((c = Bgetc(&bin)) >= 0){
> + if(c>0 && strchr("/$-__AT_.!*'(),", c)
> + || 'a'<=c && c<='z'
> + || 'A'<=c && c<='Z'
> + || '0'<=c && c<='9')
> + Bputc(&bout, c);
> + else if(c == ' ')
> + Bputc(&bout, '+');
> + else {
> + Bputc(&bout, '%');
> + Bputc(&bout, Hex[c>>4]);
> + Bputc(&bout, Hex[c&15]);
> + }
> + }
> + }
> +
> + Bflush(&bout);
> + exits(0);
> +}
>
Received on Thu Nov 01 2012 - 09:25:43 CET

This archive was generated by hypermail 2.3.0 : Thu Nov 01 2012 - 09:36:05 CET