Annotation of coherent/g/usr/lib/misc/flatten.c, revision 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.