///
/// Use resource_size function on resource object
/// instead of explicit computation.
///
//  Confidence: High
//  Copyright: (C) 2009, 2010 Nicolas Palix, DIKU.  GPLv2.
//  Copyright: (C) 2009, 2010 Julia Lawall, DIKU.  GPLv2.
//  Copyright: (C) 2009, 2010 Gilles Muller, INRIA/LiP6.  GPLv2.
//  URL: http://coccinelle.lip6.fr/
//  Options:
//
//  Keywords: resource_size
//  Version min: 2.6.27 resource_size
//

virtual context
virtual patch
virtual org
virtual report

//----------------------------------------------------------
//  For context mode
//----------------------------------------------------------

@r_context depends on context && !patch && !org@
struct resource *res;
@@

* (res->end - res->start) + 1

//----------------------------------------------------------
//  For patch mode
//----------------------------------------------------------

@r_patch depends on !context && patch && !org@
struct resource *res;
@@

- (res->end - res->start) + 1
+ resource_size(res)

//----------------------------------------------------------
//  For org mode
//----------------------------------------------------------


@r_org depends on !context && !patch && (org || report)@
struct resource *res;
position p;
@@

 (res->end@p - res->start) + 1

@rbad_org depends on !context && !patch && (org || report)@
struct resource *res;
position p != r_org.p;
@@

 res->end@p - res->start

@script:python depends on org@
p << r_org.p;
x << r_org.res;
@@

msg="ERROR with %s" % (x)
msg_safe=msg.replace("[","@(").replace("]",")")
coccilib.org.print_todo(p[0], msg_safe)

@script:python depends on report@
p << r_org.p;
x << r_org.res;
@@

msg="ERROR: Missing resource_size with %s" % (x)
coccilib.report.print_report(p[0], msg)

@script:python depends on org@
p << rbad_org.p;
x << rbad_org.res;
@@

msg="WARNING with %s" % (x)
msg_safe=msg.replace("[","@(").replace("]",")")
coccilib.org.print_todo(p[0], msg_safe)

@script:python depends on report@
p << rbad_org.p;
x << rbad_org.res;
@@

msg="WARNING: Suspicious code. resource_size is maybe missing with %s" % (x)
coccilib.report.print_report(p[0], msg)
