Hi sl,

your patch does not cleanly apply to 9base tip.

[anselm@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,  <[email protected]> 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
> @@ -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
> @@ -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
> @@ -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
> @@ -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
> @@ -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)
> @@ -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
> @@ -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);
> @@ -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++;
> @@ -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
> @@ -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
> @@ -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
> @@ -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
> @@ -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("/$-_@.!*'(),", 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);
> +}
>

Reply via email to