This patch contains several fixes to NetBSD's indent and should be applied before using pgindent. --------------------------------------------------------------------------- Index: README =================================================================== RCS file: /cvsroot/src/usr.bin/indent/README,v retrieving revision 1.1 diff -c -r1.1 README *** README 9 Apr 1993 12:59:06 -0000 1.1 --- README 15 Nov 2005 00:25:43 -0000 *************** *** 1,3 **** --- 1,13 ---- + + This patch is from NetBSD current, 2005-11-14. It contains all the + patches need for its use in PostgreSQL. + + bjm + + --------------------------------------------------------------------------- + + + This is the C indenter, it originally came from the University of Illinois via some distribution tape for PDP-11 Unix. It has subsequently been hacked upon by James Gosling @ CMU. It isn't very pretty, and really needs Index: indent_globs.h =================================================================== RCS file: /cvsroot/src/usr.bin/indent/indent_globs.h,v retrieving revision 1.8 diff -c -r1.8 indent_globs.h *** indent_globs.h 7 Aug 2003 11:14:08 -0000 1.8 --- indent_globs.h 15 Nov 2005 00:25:44 -0000 *************** *** 239,245 **** scomf, /* Same line comment font */ bodyf; /* major body font */ ! #define STACK_SIZE 150 EXTERN struct parser_state { int last_token; --- 239,249 ---- scomf, /* Same line comment font */ bodyf; /* major body font */ ! /* ! * This controls the maximum number of 'else if' clauses supported. ! * If it is exceeded, comments are placed in column 100. ! */ ! #define STACK_SIZE 1000 EXTERN struct parser_state { int last_token; Index: lexi.c =================================================================== RCS file: /cvsroot/src/usr.bin/indent/lexi.c,v retrieving revision 1.12 diff -c -r1.12 lexi.c *** lexi.c 7 Aug 2003 11:14:09 -0000 1.12 --- lexi.c 15 Nov 2005 00:25:44 -0000 *************** *** 93,99 **** int rwcode; }; ! struct templ specials[1000] = { {"switch", 1}, {"case", 2}, --- 93,99 ---- int rwcode; }; ! struct templ specials[16384] = { {"switch", 1}, {"case", 2}, *************** *** 622,629 **** else p++; if (p >= specials + sizeof specials / sizeof specials[0]) ! return; /* For now, table overflows are silently ! * ignored */ p->rwd = key; p->rwcode = val; p[1].rwd = 0; --- 622,632 ---- else p++; if (p >= specials + sizeof specials / sizeof specials[0]) ! { ! fprintf(stderr, "indent: typedef table overflow\n"); ! exit(1); ! } ! p->rwd = key; p->rwcode = val; p[1].rwd = 0; Index: parse.c =================================================================== RCS file: /cvsroot/src/usr.bin/indent/parse.c,v retrieving revision 1.7 diff -c -r1.7 parse.c *** parse.c 7 Aug 2003 11:14:09 -0000 1.7 --- parse.c 15 Nov 2005 00:25:44 -0000 *************** *** 231,236 **** --- 231,241 ---- } /* end of switch */ + if (ps.tos >= STACK_SIZE) { + fprintf(stderr, "indent: stack size overflow\n"); + exit(1); + } + reduce(); /* see if any reduction can be done */ #ifdef debug Index: pr_comment.c =================================================================== RCS file: /cvsroot/src/usr.bin/indent/pr_comment.c,v retrieving revision 1.9 diff -c -r1.9 pr_comment.c *** pr_comment.c 7 Aug 2003 11:14:09 -0000 1.9 --- pr_comment.c 15 Nov 2005 00:25:44 -0000 *************** *** 148,154 **** ps.box_com = true; ps.com_col = 1; } else { ! if (*buf_ptr == '-' || *buf_ptr == '*' || *buf_ptr == '\n') { ps.box_com = true; /* a comment with a '-', '*' * or newline immediately * after the start comment is --- 148,158 ---- ps.box_com = true; ps.com_col = 1; } else { ! /* ! * Don't process '\n' or every comment is treated as a ! * block comment, meaning there is no wrapping. ! */ ! if (*buf_ptr == '-' || *buf_ptr == '*') { ps.box_com = true; /* a comment with a '-', '*' * or newline immediately * after the start comment is *************** *** 328,333 **** --- 332,350 ---- goto end_of_comment; } } while (*buf_ptr == ' ' || *buf_ptr == '\t'); + + /* + * If there is a blank comment line, we need to prefix + * the line with the same three spaces that "/* " takes up. + * Without this code, blank stared lines in comments have + * three too-many characters on the line when wrapped. + */ + if (s_com == e_com) { + *e_com++ = ' '; /* add blanks for continuation */ + *e_com++ = ' '; + *e_com++ = ' '; + now_col += 3; + } } else if (++buf_ptr >= buf_end) fill_buffer();