Annotation of coherent/g/usr/lib/misc/flatten.c, revision 1.1.1.1

1.1       root        1: /* 
                      2:  * Function flatten() concatinates an array of the strings to a string,
                      3:  * where the input strings are separated by spaces.
                      4:  */
                      5: #include <misc.h>
                      6: 
                      7: #define        BUF_SIZE        80              /* Size of the buffer to be alloc */
                      8: 
                      9: char   *flatten(argv)
                     10: char   *argv[];
                     11: {
                     12:        extern char     *realloc();
                     13:        char            *buf;                   /* Buffer for output string */
                     14:        unsigned        count = BUF_SIZE;       /* Size of the buffer */
                     15:        unsigned        len;                    /* Current length used */
                     16:        unsigned        i;                      /* Length of new addition */
                     17: 
                     18:        buf = alloc(BUF_SIZE);
                     19:        *buf = '\0';
                     20:        len  = 1;       /* We always need a terminator */
                     21: 
                     22:        for (; *argv != NULL; argv++) {
                     23:                while ((len + (i = strlen(*argv))) > count) {
                     24:                        count += BUF_SIZE;
                     25:                        if ((buf = realloc(buf, count)) == NULL)
                     26:                                fatal("out of space");
                     27:                }
                     28: 
                     29:                /* If it is not the first string, write string separator */
                     30:                if (len > 1) 
                     31:                        strcpy(buf + len++ - 1, " ");
                     32: 
                     33:                strcpy(buf + len - 1, *argv);
                     34:                len += i;
                     35:        }
                     36:        return (realloc(buf, len));
                     37: }
                     38: 
                     39: #ifdef TEST
                     40: main(argc, argv)
                     41: int    argc;
                     42: char   **argv;
                     43: {
                     44:        puts(flatten(argv));
                     45: }
                     46: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.