OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [insight/] [mmalloc/] [mmemalign.c] - Blame information for rev 1765

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 578 markom
/* Copyright (C) 1991, 1992 Free Software Foundation, Inc.
2
This file is part of the GNU C Library.
3
 
4
The GNU C Library is free software; you can redistribute it and/or
5
modify it under the terms of the GNU Library General Public License as
6
published by the Free Software Foundation; either version 2 of the
7
License, or (at your option) any later version.
8
 
9
The GNU C Library is distributed in the hope that it will be useful,
10
but WITHOUT ANY WARRANTY; without even the implied warranty of
11
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12
Library General Public License for more details.
13
 
14
You should have received a copy of the GNU Library General Public
15
License along with the GNU C Library; see the file COPYING.LIB.  If
16
not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17
Boston, MA 02111-1307, USA.  */
18
 
19
#include "mmprivate.h"
20
 
21
PTR
22
mmemalign (md, alignment, size)
23
  PTR md;
24
  size_t alignment;
25
  size_t size;
26
{
27
  PTR result;
28
  unsigned long int adj;
29
  struct alignlist *l;
30
  struct mdesc *mdp;
31
 
32
  if ((result = mmalloc (md, size + alignment - 1)) != NULL)
33
    {
34
      adj = RESIDUAL (result, alignment);
35
      if (adj != 0)
36
        {
37
          mdp = MD_TO_MDP (md);
38
          for (l = mdp -> aligned_blocks; l != NULL; l = l -> next)
39
            {
40
              if (l -> aligned == NULL)
41
                {
42
                  /* This slot is free.  Use it.  */
43
                  break;
44
                }
45
            }
46
          if (l == NULL)
47
            {
48
              l = (struct alignlist *) mmalloc (md, sizeof (struct alignlist));
49
              if (l == NULL)
50
                {
51
                  mfree (md, result);
52
                  return (NULL);
53
                }
54
              l -> next = mdp -> aligned_blocks;
55
              mdp -> aligned_blocks = l;
56
            }
57
          l -> exact = result;
58
          result = l -> aligned = (char *) result + alignment - adj;
59
        }
60
    }
61
  return (result);
62
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.