/* patch.c:
 *
 * vim:smartindent ts=8:sts=2:sta:et:ai:shiftwidth=2
 ****************************************************************
 * Copyright (C) 2005 Canonical Limited
 *        Authors: Robert Collins <robert.collins@canonical.com>
 *
 * See the file "COPYING" for further information about
 * the copyright and warranty status of this work.
 */


#include "hackerlab/bugs/panic.h"
#include "hackerlab/char/str.h"
#include "libarch/namespace.h"
#include "libarch/patch.h"

void
arch_patch_init (arch_patch_t *patch, t_uchar const *patch_id)
{
    arch_patch_id_init (&patch->patch_id, patch_id);
    patch->creator = NULL;
}

void 
arch_patch_finalise (arch_patch_t *patch)
{
    arch_patch_id_finalise (&patch->patch_id);
    lim_free (0, patch->creator);
    patch->creator = NULL;
}

arch_patch_t * 
arch_patch_new (t_uchar const *patch_id)
{
    arch_patch_t *result = lim_malloc (0, sizeof (arch_patch_t));
    arch_patch_init (result, patch_id);
    return result;
}

void
arch_patch_delete (arch_patch_t **patch)
{
    if (!*patch)
        return;
    arch_patch_finalise (*patch);
    lim_free (0, *patch);
    *patch = NULL;
}

arch_patch_t *
arch_patch_copy (arch_patch_t *patch)
{
    arch_patch_t *result = arch_patch_new (arch_patch_id_patch_id(&patch->patch_id));
    if (patch->creator)
        arch_patch_creator_set(result, patch->creator);
    return result;
}

arch_patch_id *
arch_patch_patch_id (arch_patch_t *patch)
{
    return &patch->patch_id;
}

t_uchar *
arch_patch_creator (arch_patch_t *patch)
{
    return patch->creator;
}

void
arch_patch_creator_set (arch_patch_t *patch, t_uchar const *creator)
{
    invariant (!patch->creator);
    patch->creator = str_save (0, creator);
}


syntax highlighted by Code2HTML, v. 0.9.1