Show
Ignore:
Timestamp:
02/07/08 04:44:12 (6 years ago)
Author:
Theo Schlossnagle <jesus@omniti.com>
git-committer:
Theo Schlossnagle <jesus@omniti.com> 1202359452 +0000
git-parent:

[c55a8e66237e1bd8d22b4497b6f0421472187764]

git-author:
Theo Schlossnagle <jesus@omniti.com> 1202359452 +0000
Message:

replace FILEs with file descriptors

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • src/noitedit/el.c

    rc55a8e6 r11d2dcb  
    8484 */ 
    8585public EditLine * 
    86 el_init(const char *prog, int infd, FILE *fout, int errfd) 
     86el_init(const char *prog, int infd, int outfd, int errfd) 
    8787{ 
    8888 
     
    9898 
    9999        el->el_infd = infd; 
    100         el->el_outfile = fout
     100        el->el_outfd = outfd
    101101        el->el_errfd = errfd; 
    102102        el->el_err_printf = el_err_printf; 
     103        el->el_std_printf = el_std_printf; 
     104        el->el_std_putc = el_std_putc; 
     105        el->el_std_flush = el_std_flush; 
    103106        el->el_prog = strdup(prog); 
    104107 
     
    180183                break; 
    181184 
     185        case EL_ERRPRINTFFN: 
     186                el->el_err_printf = va_arg(va, el_printffunc_t); 
     187                rv = 0; 
     188                break; 
     189 
     190        case EL_STDPRINTFFN: 
     191                el->el_std_printf = va_arg(va, el_printffunc_t); 
     192                rv = 0; 
     193                break; 
     194 
     195        case EL_STDPUTCFN: 
     196                el->el_std_putc = va_arg(va, el_putcfunc_t); 
     197                rv = 0; 
     198                break; 
     199 
     200        case EL_STDFLUSHFN: 
     201                el->el_std_flush = va_arg(va, el_flushfunc_t); 
     202                rv = 0; 
     203                break; 
     204 
     205        case EL_USERDATA: 
     206                el->el_userdata = va_arg(va, void *); 
     207                rv = 0; 
     208                break; 
     209 
    182210        case EL_TERMINAL: 
    183211                rv = term_set(el, va_arg(va, char *)); 
     
    290318                const char *cptr; 
    291319                el_pfunc_t elpf; 
     320                el_printffunc_t eprintff; 
     321                el_putcfunc_t eputcf; 
     322                el_flushfunc_t eflushf; 
    292323        } vret; 
    293324 
     
    299330        case EL_RPROMPT: 
    300331                rv = prompt_get(el, &vret.elpf, op); 
     332                break; 
     333 
     334        case EL_ERRPRINTFFN: 
     335                *((el_printffunc_t *)ret) = el->el_err_printf; 
     336                rv = 0; 
     337                break; 
     338 
     339        case EL_STDPRINTFFN: 
     340                *((el_printffunc_t *)ret) = el->el_std_printf; 
     341                rv = 0; 
     342                break; 
     343 
     344        case EL_STDPUTCFN: 
     345                *((el_putcfunc_t *)ret) = el->el_std_putc; 
     346                rv = 0; 
     347                break; 
     348 
     349        case EL_STDFLUSHFN: 
     350                *((el_flushfunc_t *)ret) = el->el_std_flush; 
     351                rv = 0; 
     352                break; 
     353 
     354        case EL_USERDATA: 
     355                *((void **)ret) = el->el_userdata; 
     356                rv = 0; 
    301357                break; 
    302358 
     
    519575 
    520576protected int 
    521 el_err_vprintf(EditLine *el, char *fmt, va_list arg) 
     577el_err_vprintf(EditLine *el, const char *fmt, va_list arg) 
    522578{ 
    523579        int len; 
     
    530586 
    531587protected int 
    532 el_err_printf(EditLine *el, char *fmt, ...) 
     588el_err_printf(EditLine *el, const char *fmt, ...) 
    533589{ 
    534590        int len; 
     
    539595        return len; 
    540596} 
     597 
     598protected int 
     599el_std_vprintf(EditLine *el, const char *fmt, va_list arg) 
     600{ 
     601        int len; 
     602        char buffer[1024]; 
     603        len = vsnprintf(buffer, sizeof(buffer), fmt, arg); 
     604        if(len > sizeof(buffer)) len = sizeof(buffer); 
     605        len = write(el->el_outfd, buffer, len); 
     606        return len; 
     607} 
     608 
     609protected int 
     610el_std_printf(EditLine *el, const char *fmt, ...) 
     611{ 
     612        int len; 
     613        va_list arg; 
     614        va_start(arg, fmt); 
     615        len = el_std_vprintf(el, fmt, arg); 
     616        va_end(arg); 
     617        return len; 
     618} 
     619 
     620protected int 
     621el_std_putc(int i, EditLine *el) 
     622{ 
     623        unsigned char c = i & 0xff; 
     624        return write(el->el_outfd, &c, 1); 
     625} 
     626protected int 
     627el_std_flush(EditLine *el) 
     628{ 
     629        return 0; 
     630} 
  • src/noitedit/el.h

    rc55a8e6 r11d2dcb  
    125125struct editline { 
    126126        char             *el_prog;      /* the program name             */ 
    127         FILE            *el_outfile;   /* Stdio stuff                 */ 
     127        int              el_outfd;     /* Output file descriptor      */ 
    128128        int               el_errfd;     /* Error file descriptor        */ 
    129129        int               el_infd;      /* Input file descriptor        */ 
     
    147147        int               el_nb_state;  /* Did we eagain?               */ 
    148148        int             (*el_err_printf)(struct editline *, const char *, ...); 
     149        int             (*el_std_printf)(struct editline *, const char *, ...); 
     150        int             (*el_std_putc)(int, struct editline *); 
     151        int             (*el_std_flush)(struct editline *); 
     152        void             *el_userdata; 
    149153}; 
    150154 
    151155protected int   el_editmode(EditLine *, int, char **); 
    152 protected int   el_err_printf(EditLine *el, char *fmt, ...); 
    153 protected int   el_err_vprintf(EditLine *el, char *fmt, va_list arg); 
     156protected int   el_err_printf(EditLine *, const char *, ...); 
     157protected int   el_err_vprintf(EditLine *, const char *, va_list); 
     158protected int   el_std_printf(EditLine *, const char *, ...); 
     159protected int   el_std_vprintf(EditLine *, const char *, va_list); 
     160protected int   el_std_putc(int, EditLine *); 
     161protected int   el_std_flush(EditLine *); 
    154162 
    155163#ifdef DEBUG 
  • src/noitedit/hist.c

    rbafab25 r11d2dcb  
    169169                return (-1); 
    170170        for (str = HIST_LAST(el); str != NULL; str = HIST_PREV(el)) 
    171                 (void) fprintf(el->el_outfile, "%d %s", 
     171                (void) el->el_std_printf(el, "%d %s", 
    172172                    el->el_history.ev.num, str); 
    173173        return (0); 
  • src/noitedit/histedit.h

    rc55a8e6 r11d2dcb  
    8888 * Initialization, cleanup, and resetting 
    8989 */ 
    90 EditLine        *el_init(const char *, int, FILE *, int); 
     90EditLine        *el_init(const char *, int, int, int); 
    9191void             el_reset(EditLine *); 
    9292void             el_end(EditLine *); 
     
    135135#define EL_EDITMODE     11      /* , int);                      */ 
    136136#define EL_RPROMPT      12      /* , el_pfunc_t);               */ 
     137 
     138#define EL_ERRPRINTFFN  13      /* , el_printffunc_t);          */ 
     139#define EL_STDPRINTFFN  14      /* , el_printffunc_t);          */ 
     140#define EL_STDPUTCFN    15      /* , el_putcfunc_t);            */ 
     141#define EL_STDFLUSHFN   16      /* , el_flushfunc_t);           */ 
     142#define EL_USERDATA     17      /* , void *);                   */ 
     143 
     144typedef int (*el_printffunc_t)(EditLine *, const char *, ...); 
     145typedef int (*el_putcfunc_t)(int, EditLine *); 
     146typedef int (*el_flushfunc_t)(EditLine *); 
    137147 
    138148/* 
  • src/noitedit/key.c

    rc55a8e6 r11d2dcb  
    579579                case XK_STR: 
    580580                case XK_EXE: 
    581                         (void) fprintf(el->el_outfile, fmt, key, 
     581                        (void) el->el_std_printf(el, fmt, key, 
    582582                            key__decode_str(val->str, unparsbuf, 
    583583                                ntype == XK_STR ? "\"\"" : "[]")); 
     
    586586                        for (fp = el->el_map.help; fp->name; fp++) 
    587587                                if (val->cmd == fp->func) { 
    588                                         (void) fprintf(el->el_outfile, fmt, 
     588                                        (void) el->el_std_printf(el, fmt, 
    589589                                            key, fp->name); 
    590590                                        break; 
     
    592592#ifdef DEBUG_KEY 
    593593                        if (fp->name == NULL) 
    594                                 (void) fprintf(el->el_outfile
     594                                (void) el->el_std_printf(el
    595595                                    "BUG! Command not found.\n"); 
    596596#endif 
     
    602602                } 
    603603        else 
    604                 (void) fprintf(el->el_outfile, fmt, key, "no input"); 
     604                (void) el->el_std_printf(el, fmt, key, "no input"); 
    605605} 
    606606 
  • src/noitedit/map.c

    rc55a8e6 r11d2dcb  
    11371137                for (bp = el->el_map.help; bp->name != NULL; bp++) 
    11381138                        if (bp->func == map[(unsigned char) *in]) { 
    1139                                 (void) fprintf(el->el_outfile
     1139                                (void) el->el_std_printf(el
    11401140                                    "%s\t->\t%s\n", outbuf, bp->name); 
    11411141                                return; 
     
    11621162        if (map[first] == ED_UNASSIGNED) { 
    11631163                if (first == last) 
    1164                         (void) fprintf(el->el_outfile
     1164                        (void) el->el_std_printf(el
    11651165                            "%-15s->  is undefined\n", 
    11661166                            key__decode_str(firstbuf, unparsbuf, STRQQ)); 
     
    11701170                if (bp->func == map[first]) { 
    11711171                        if (first == last) { 
    1172                                 (void) fprintf(el->el_outfile, "%-15s->  %s\n", 
     1172                                (void) el->el_std_printf(el, "%-15s->  %s\n", 
    11731173                                    key__decode_str(firstbuf, unparsbuf, STRQQ), 
    11741174                                    bp->name); 
    11751175                        } else { 
    1176                                 (void) fprintf(el->el_outfile
     1176                                (void) el->el_std_printf(el
    11771177                                    "%-4s to %-7s->  %s\n", 
    11781178                                    key__decode_str(firstbuf, unparsbuf, STRQQ), 
     
    11851185#ifdef MAP_DEBUG 
    11861186        if (map == el->el_map.key) { 
    1187                 (void) fprintf(el->el_outfile
     1187                (void) el->el_std_printf(el
    11881188                    "BUG!!! %s isn't bound to anything.\n", 
    11891189                    key__decode_str(firstbuf, unparsbuf, STRQQ)); 
    1190                 (void) fprintf(el->el_outfile, "el->el_map.key[%d] == %d\n", 
     1190                (void) el->el_std_printf(el, "el->el_map.key[%d] == %d\n", 
    11911191                    first, el->el_map.key[first]); 
    11921192        } else { 
    1193                 (void) fprintf(el->el_outfile
     1193                (void) el->el_std_printf(el
    11941194                    "BUG!!! %s isn't bound to anything.\n", 
    11951195                    key__decode_str(firstbuf, unparsbuf, STRQQ)); 
    1196                 (void) fprintf(el->el_outfile, "el->el_map.alt[%d] == %d\n", 
     1196                (void) el->el_std_printf(el, "el->el_map.alt[%d] == %d\n", 
    11971197                    first, el->el_map.alt[first]); 
    11981198        } 
     
    12101210        int prev, i; 
    12111211 
    1212         (void) fprintf(el->el_outfile, "Standard key bindings\n"); 
     1212        (void) el->el_std_printf(el, "Standard key bindings\n"); 
    12131213        prev = 0; 
    12141214        for (i = 0; i < N_KEYS; i++) { 
     
    12201220        map_print_some_keys(el, el->el_map.key, prev, i - 1); 
    12211221 
    1222         (void) fprintf(el->el_outfile, "Alternative key bindings\n"); 
     1222        (void) el->el_std_printf(el, "Alternative key bindings\n"); 
    12231223        prev = 0; 
    12241224        for (i = 0; i < N_KEYS; i++) { 
     
    12301230        map_print_some_keys(el, el->el_map.alt, prev, i - 1); 
    12311231 
    1232         (void) fprintf(el->el_outfile, "Multi-character bindings\n"); 
     1232        (void) el->el_std_printf(el, "Multi-character bindings\n"); 
    12331233        key_print(el, ""); 
    1234         (void) fprintf(el->el_outfile, "Arrow key bindings\n"); 
     1234        (void) el->el_std_printf(el, "Arrow key bindings\n"); 
    12351235        term_print_arrow(el, ""); 
    12361236} 
     
    12941294                                for (bp = el->el_map.help; bp->name != NULL; 
    12951295                                    bp++) 
    1296                                         (void) fprintf(el->el_outfile
     1296                                        (void) el->el_std_printf(el
    12971297                                            "%s\n\t%s\n", 
    12981298                                            bp->name, bp->description); 
  • src/noitedit/readline.c

    rc55a8e6 r11d2dcb  
    208208 
    209209        e = el_init(rl_readline_name, 
    210                     fileno(rl_instream), rl_outstream, fileno(stderr)); 
     210                    fileno(rl_instream), fileno(rl_outstream), fileno(stderr)); 
    211211 
    212212        if (!editmode) 
     
    15651565        for(; count > 0; count--) { 
    15661566                for(i=0; i < limit && matches[idx]; i++, idx++) 
    1567                         fprintf(e->el_outfile, "%-*s  ", max, matches[idx]); 
    1568                 fprintf(e->el_outfile, "\n"); 
     1567                        e->el_std_printf(e, "%-*s  ", max, matches[idx]); 
     1568                e->el_std_printf(e, "\n"); 
    15691569        } 
    15701570} 
     
    16721672                                 
    16731673                        /* newline to get on next line from command line */ 
    1674                         fprintf(e->el_outfile, "\n"); 
     1674                        e->el_std_printf(e, "\n"); 
    16751675 
    16761676                        /* 
     
    16791679                         */ 
    16801680                        if (matches_num > rl_completion_query_items) { 
    1681                                 fprintf(e->el_outfile, 
     1681                                e->el_std_printf(e, 
    16821682                                "Display all %d possibilities? (y or n) ", 
    16831683                                        matches_num); 
    1684                                 fflush(e->el_outfile); 
     1684                                e->el_std_flush(e); 
    16851685                                if (getc(stdin) != 'y') 
    16861686                                        match_display = 0; 
    1687                                 fprintf(e->el_outfile, "\n"); 
     1687                                e->el_std_printf(e, "\n"); 
    16881688                        } 
    16891689 
  • src/noitedit/term.c

    rc55a8e6 r11d2dcb  
    12541254        el = el_multi_get_el(); 
    12551255        if(!el) return -1; 
    1256         return (fputc(c, el->el_outfile)); 
     1256        return (el->el_std_putc(c, el)); 
    12571257} 
    12581258 
     
    12671267        el = el_multi_get_el(); 
    12681268        if(!el) return; 
    1269         (void) fflush(el->el_outfile); 
     1269        (void) el->el_std_flush(el); 
    12701270} 
    12711271 
     
    12841284        el_multi_set_el(el); 
    12851285 
    1286         (void) fprintf(el->el_outfile, "\n\tYour terminal has the\n"); 
    1287         (void) fprintf(el->el_outfile, "\tfollowing characteristics:\n\n"); 
    1288         (void) fprintf(el->el_outfile, "\tIt has %d columns and %d lines\n", 
     1286        (void) el->el_std_printf(el, "\n\tYour terminal has the\n"); 
     1287        (void) el->el_std_printf(el, "\tfollowing characteristics:\n\n"); 
     1288        (void) el->el_std_printf(el, "\tIt has %d columns and %d lines\n", 
    12891289            Val(T_co), Val(T_li)); 
    1290         (void) fprintf(el->el_outfile
     1290        (void) el->el_std_printf(el
    12911291            "\tIt has %s meta key\n", EL_HAS_META ? "a" : "no"); 
    1292         (void) fprintf(el->el_outfile
     1292        (void) el->el_std_printf(el
    12931293            "\tIt can%suse tabs\n", EL_CAN_TAB ? " " : "not "); 
    1294         (void) fprintf(el->el_outfile, "\tIt %s automatic margins\n", 
     1294        (void) el->el_std_printf(el, "\tIt %s automatic margins\n", 
    12951295            EL_HAS_AUTO_MARGINS ? "has" : "does not have"); 
    12961296        if (EL_HAS_AUTO_MARGINS) 
    1297                 (void) fprintf(el->el_outfile, "\tIt %s magic margins\n", 
     1297                (void) el->el_std_printf(el, "\tIt %s magic margins\n", 
    12981298                    EL_HAS_MAGIC_MARGINS ? "has" : "does not have"); 
    12991299 
    13001300        for (t = tstr, ts = el->el_term.t_str; t->name != NULL; t++, ts++) 
    1301                 (void) fprintf(el->el_outfile, "\t%25s (%s) == %s\n", 
     1301                (void) el->el_std_printf(el, "\t%25s (%s) == %s\n", 
    13021302                    t->long_name, 
    13031303                    t->name, *ts && **ts ? 
    13041304                    key__decode_str(*ts, upbuf, "") : "(empty)"); 
    1305         (void) fputc('\n', el->el_outfile); 
     1305        (void) el->el_std_putc('\n', el); 
    13061306        return (0); 
    13071307} 
     
    14251425                return (0); 
    14261426        if (strcmp(*argv, "tabs") == 0) { 
    1427                 (void) fprintf(el->el_outfile, fmts, EL_CAN_TAB ? "yes" : "no"); 
     1427                (void) el->el_std_printf(el, fmts, EL_CAN_TAB ? "yes" : "no"); 
    14281428                return (0); 
    14291429        } else if (strcmp(*argv, "meta") == 0) { 
    1430                 (void) fprintf(el->el_outfile, fmts, Val(T_km) ? "yes" : "no"); 
     1430                (void) el->el_std_printf(el, fmts, Val(T_km) ? "yes" : "no"); 
    14311431                return (0); 
    14321432        } else if (strcmp(*argv, "xn") == 0) { 
    1433                 (void) fprintf(el->el_outfile, fmts, EL_HAS_MAGIC_MARGINS ? 
     1433                (void) el->el_std_printf(el, fmts, EL_HAS_MAGIC_MARGINS ? 
    14341434                    "yes" : "no"); 
    14351435                return (0); 
    14361436        } else if (strcmp(*argv, "am") == 0) { 
    1437                 (void) fprintf(el->el_outfile, fmts, EL_HAS_AUTO_MARGINS ? 
     1437                (void) el->el_std_printf(el, fmts, EL_HAS_AUTO_MARGINS ? 
    14381438                    "yes" : "no"); 
    14391439                return (0); 
     
    14441444                for (i = 0; baud_rate[i].b_name != NULL; i++) 
    14451445                        if (el->el_tty.t_speed == baud_rate[i].b_rate) { 
    1446                                 (void) fprintf(el->el_outfile, fmts, 
     1446                                (void) el->el_std_printf(el, fmts, 
    14471447                                    baud_rate[i].b_name); 
    14481448                                return (0); 
    14491449                        } 
    1450                 (void) fprintf(el->el_outfile, fmtd, 0); 
     1450                (void) el->el_std_printf(el, fmtd, 0); 
    14511451#else 
    1452                 (void) fprintf(el->el_outfile, fmtd, (int)el->el_tty.t_speed); 
     1452                (void) el->el_std_printf(el, fmtd, (int)el->el_tty.t_speed); 
    14531453#endif 
    14541454                return (0); 
    14551455        } else if (strcmp(*argv, "rows") == 0 || strcmp(*argv, "lines") == 0) { 
    1456                 (void) fprintf(el->el_outfile, fmtd, Val(T_li)); 
     1456                (void) el->el_std_printf(el, fmtd, Val(T_li)); 
    14571457                return (0); 
    14581458        } else if (strcmp(*argv, "cols") == 0) { 
    1459                 (void) fprintf(el->el_outfile, fmtd, Val(T_co)); 
     1459                (void) el->el_std_printf(el, fmtd, Val(T_co)); 
    14601460                return (0); 
    14611461        } 
  • src/noitedit/tty.c

    rc55a8e6 r11d2dcb  
    10851085                for (m = ttymodes; m->m_name; m++) { 
    10861086                        if (m->m_type != i) { 
    1087                                 (void) fprintf(el->el_outfile, "%s%s", 
     1087                                (void) el->el_std_printf(el, "%s%s", 
    10881088                                    i != -1 ? "\n" : "", 
    10891089                                    el->el_tty.t_t[z][m->m_type].t_name); 
     
    11021102 
    11031103                                if (len + cu >= el->el_term.t_size.h) { 
    1104                                         (void) fprintf(el->el_outfile, "\n%*s", 
     1104                                        (void) el->el_std_printf(el, "\n%*s", 
    11051105                                            st, ""); 
    11061106                                        len = st + cu; 
     
    11091109 
    11101110                                if (x != '\0') 
    1111                                         (void) fprintf(el->el_outfile, "%c%s ", 
     1111                                        (void) el->el_std_printf(el, "%c%s ", 
    11121112                                            x, m->m_name); 
    11131113                                else 
    1114                                         (void) fprintf(el->el_outfile, "%s ", 
     1114                                        (void) el->el_std_printf(el, "%s ", 
    11151115                                            m->m_name); 
    11161116                        } 
    11171117                } 
    1118                 (void) fprintf(el->el_outfile, "\n"); 
     1118                (void) el->el_std_printf(el, "\n"); 
    11191119                return (0); 
    11201120        }