OSSP CVS Repository

ossp - ossp-pkg/var/padding.c
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/var/padding.c
#include <sys/types.h>
#include <regex.h>
#include "internal.h"

int padding(tokenbuf* data, tokenbuf* widthstr, tokenbuf* fill, char position)
    {
    tokenbuf result;
    size_t width = tokenbuf2int(widthstr);
    int i;

    printf("Padding data '%s' to width '%d' by filling in '%s' to position '%c'.\n",
           data->begin, width, fill->begin, position);

    if (fill->begin == fill->end)
        return VAR_EMPTY_PADDING_FILL_STRING;

    init_tokenbuf(&result);

    if (position == 'l')
        {
        i = width - (data->end - data->begin);
        if (i > 0)
            {
            printf("Missing %d characters at the end of the data string.\n", i);
            i = i / (fill->end - fill->begin);
            printf("That's %d times the padding string.\n", i);
            while(i > 0)
                {
                if (!append_to_tokenbuf(data, fill->begin, fill->end - fill->begin))
                    return VAR_OUT_OF_MEMORY;
                --i;
                }
            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
            printf("Plus a remainder of %d characters.\n", i);
            if (!append_to_tokenbuf(data, fill->begin, i))
                return VAR_OUT_OF_MEMORY;
            }
        }
    else if (position == 'r')
        {
        i = width - (data->end - data->begin);
        if (i > 0)
            {
            printf("Missing %d characters at the beginning of the data string.\n", i);
            i = i / (fill->end - fill->begin);
            printf("That's %d times the padding string.\n", i);
            while(i > 0)
                {
                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                    {
                    free_tokenbuf(&result);
                    return VAR_OUT_OF_MEMORY;
                    }
                --i;
                }
            i = (width - (data->end - data->begin)) % (fill->end - fill->begin);
            printf("Plus a remainder of %d characters.\n", i);
            if (!append_to_tokenbuf(&result, fill->begin, i))
                {
                free_tokenbuf(&result);
                return VAR_OUT_OF_MEMORY;
                }
            if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                {
                free_tokenbuf(&result);
                return VAR_OUT_OF_MEMORY;
                }

            free_tokenbuf(data);
            move_tokenbuf(&result, data);
            }
        }
     else if (position == 'c')
        {
        i = (width - (data->end - data->begin)) / 2;
        if (i > 0)
            {
            /* Create the prefix. */

            printf("Missing %d characters at the beginning of the data string.\n", i);
            i = i / (fill->end - fill->begin);
            printf("That's %d times the padding string.\n", i);
            while(i > 0)
                {
                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                    {
                    free_tokenbuf(&result);
                    return VAR_OUT_OF_MEMORY;
                    }
                --i;
                }
            i = ((width - (data->end - data->begin)) / 2) % (fill->end - fill->begin);
            printf("Plus a remainder of %d characters.\n", i);
            if (!append_to_tokenbuf(&result, fill->begin, i))
                {
                free_tokenbuf(&result);
                return VAR_OUT_OF_MEMORY;
                }

            /* Append the actual data string. */

            if (!append_to_tokenbuf(&result, data->begin, data->end - data->begin))
                {
                free_tokenbuf(&result);
                return VAR_OUT_OF_MEMORY;
                }

            /* Append the suffix. */

            i = width - (result.end - result.begin);
            printf("Missing %d characters at the end of the data string.\n", i);
            i = i / (fill->end - fill->begin);
            printf("That's %d times the padding string.\n", i);
            while(i > 0)
                {
                if (!append_to_tokenbuf(&result, fill->begin, fill->end - fill->begin))
                    {
                    free_tokenbuf(&result);
                    return VAR_OUT_OF_MEMORY;
                    }
                --i;
                }
            i = width - (result.end - result.begin);
            printf("Plus a remainder of %d characters.\n", i);
            if (!append_to_tokenbuf(&result, fill->begin, i))
                {
                free_tokenbuf(&result);
                return VAR_OUT_OF_MEMORY;
                }

            /* Move string from temporary buffer to data buffer. */

            free_tokenbuf(data);
            move_tokenbuf(&result, data);
            }
        }

    return VAR_OK;
    }

CVSTrac 2.0.1