File: dependencies.xs

package info (click to toggle)
libconvert-binary-c-perl 0.76-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 9,356 kB
  • sloc: ansic: 63,674; perl: 18,584; yacc: 2,143; makefile: 28
file content (80 lines) | stat: -rw-r--r-- 2,065 bytes parent folder | download | duplicates (2)
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
71
72
73
74
75
76
77
78
79
80
################################################################################
#
# $Project: /Convert-Binary-C $
# $Author: mhx $
# $Date: 2011/04/10 12:32:32 +0200 $
# $Revision: 7 $
# $Source: /xsubs/dependencies.xs $
#
################################################################################
#
# Copyright (c) 2002-2011 Marcus Holland-Moritz. All rights reserved.
# This program is free software; you can redistribute it and/or modify
# it under the same terms as Perl itself.
#
################################################################################


################################################################################
#
#   METHOD: dependencies
#
#   WRITTEN BY: Marcus Holland-Moritz             ON: Sep 2002
#   CHANGED BY:                                   ON:
#
################################################################################

void
CBC::dependencies()
  PREINIT:
    CBC_METHOD(dependencies);
    HashIterator hi;
    const char *pKey;
    FileInfo   *pFI;

  PPCODE:
    CT_DEBUG_METHOD;

    CHECK_PARSE_DATA;
    CHECK_VOID_CONTEXT;

    if (GIMME_V == G_SCALAR)
    {
      HV *hv = newHV();

      HT_foreach(pKey, pFI, hi, THIS->cpi.htFiles)
      {
        if (pFI && pFI->valid)
        {
          SV *attr;
          HV *hattr = newHV();

          HV_STORE_CONST(hattr, "size",  newSVuv(pFI->size));
          HV_STORE_CONST(hattr, "mtime", newSViv(pFI->modify_time));
          HV_STORE_CONST(hattr, "ctime", newSViv(pFI->change_time));

          attr = newRV_noinc((SV *) hattr);

          if (hv_store(hv, pFI->name, strlen(pFI->name), attr, 0) == NULL)
            SvREFCNT_dec(attr);
        }
      }

      XPUSHs(sv_2mortal(newRV_noinc((SV *) hv)));
      XSRETURN(1);
    }
    else
    {
      int keylen, count = 0;

      HI_init(&hi, THIS->cpi.htFiles);
      while (HI_next(&hi, &pKey, &keylen, (void **) &pFI))
        if (pFI && pFI->valid)
        {
          XPUSHs(sv_2mortal(newSVpvn(CONST_CHAR(pKey), keylen)));
          count++;
        }

      XSRETURN(count);
    }