summaryrefslogtreecommitdiff
path: root/pith/body.c
blob: ffba71ae7ec70b05330104e826d2eff6aff5539f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
/*
 * ========================================================================
 * Copyright 2013-2019 Eduardo Chappa
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * ========================================================================
 */

#include "../pith/headers.h"
#include "../pith/body.h"
#include "../pith/smime.h"
#include "../pith/ical.h"

void *
create_body_sparep(SpareType stype, void *s)
{
  BODY_SPARE_S *rv;

  rv = fs_get(sizeof(BODY_SPARE_S));
  rv->sptype = stype;
  rv->data   = s;
  return (void *) rv;
}

SpareType
get_body_sparep_type(void *s)
{
  return ((BODY_SPARE_S *)s)->sptype;
}

void *
get_body_sparep_data(void *s)
{
  return ((BODY_SPARE_S *)s)->data;
}

void
free_body_sparep(void **sparep)
{
    char *s;
    SIZEDTEXT *st;
    VCALENDAR_S *vcal;

    if(sparep && *sparep){
	switch(get_body_sparep_type(*sparep)){
#ifdef SMIME
	  case P7Type:  PKCS7_free((PKCS7 *) get_body_sparep_data(*sparep));
			break;
#endif /* SMIME */
	  case CharType: s = (char *)get_body_sparep_data(*sparep);
			 fs_give((void **)  &s);
			 break;
	  case SizedText: st = (SIZEDTEXT *)get_body_sparep_data(*sparep);
			 fs_give((void **) &st->data);
			 fs_give((void **) &st);
			 break;
	  case iCalType: vcal = (VCALENDAR_S *)get_body_sparep_data(*sparep);
			 ical_free_vcalendar((void **) &vcal);
			 break;
	  default : break;
	}
	((BODY_SPARE_S *)(*sparep))->data = NULL;
	fs_give(sparep);
    }
}