
    f                         d dl Zd dlZd dlZd dlZd dlZddlmZ d Zd Z	d Z
d Z ej                         Zej                  dfdZ G d	 d
e      ZddZdZd Z G d de      Zy)    N   )libc           	      x   g }t        | d      5 }|j                         }|j                  d      D ]p  }|j                  d      }|dk(  r|j	                  t        |             4t        |d |       }t        ||dz   d        }|j                  t        ||dz                r 	 d d d        |S # 1 sw Y   |S xY w)Nr,-r   )openreadsplitfindappendintextendrange)pathcpusfcpus_range_str	cpu_rangerangeopstartends           +/usr/lib/python3/dist-packages/bcc/utils.py_read_cpu_ranger      s    D	dC 	1A'--c2 	1InnS)G"}C	N+Ihw/0)GAIJ/0E%Q/0	1	1 K	1 Ks   BB//B9c                      t        d      S )Nz/sys/devices/system/cpu/onliner        r   get_online_cpusr    $   s    ;<<r   c                      t        d      S )Nz /sys/devices/system/cpu/possibler   r   r   r   get_possible_cpusr"   '   s    =>>r   c                     t        j                  |      }t        j                  |t        j                        j
                  j                         }|| v r|S d S N)r   bcc_procutils_languagectcastc_char_pvaluedecode)
candidatespidreslanguages       r   detect_languager/   *   sG    

$
$S
)CwwsBKK(..557H:-8747r   c                     t        |d      r|j                  n|}|j                  |        |r|j                  d       |j                          y)zA
    printb(s)

    print a bytes object to stdout and flush
    buffer   
N)hasattrr1   writeflush)sfilenlbufs       r   printbr:   1   s;     !x0$++dCIIaL			%JJLr   c                   "    e Zd ZdZd Zd Zd Zy)	ArgStringz
    ArgString(arg)

    encapsulate a system argument that can be easily coerced to a bytes()
    object, which is better for comparing to kernel or probe data (which should
    never be en/decode()'ed).
    c                 t    t         j                  d   dk\  r|| _        y |j                  t              | _        y )Nr      )sysversion_infor6   r*   FILESYSTEMENCODING)selfargs     r   __init__zArgString.__init__F   s-    A!#DFZZ 23DFr   c                 @    | j                   j                  t              S r$   )r6   encoderA   rB   s    r   	__bytes__zArgString.__bytes__L   s    vv}}/00r   c                     | j                   S r$   )r6   rG   s    r   __str__zArgString.__str__O   s    vvr   N)__name__
__module____qualname____doc__rD   rH   rJ   r   r   r   r<   r<   >   s    41r   r<   c           	          t        |d      r|nt        j                  }t        j                  t        j
                  d      |       |j                  t        j                  | ||||             y )Nr4      )r   r7   )	r3   r?   stderr	tracebackprint_stack	_getframer4   warningsformatwarning)messagecategoryfilenamelinenor7   linelogs          r   warn_with_tracebackr]   R   sN    $($cjjCCMM!,37IIh$$Wh&$OPr   Fc                     | | S t         rt        |       t        u s
J d| z         | S t        |       t        ur7t        j                  d| z  t
        d       t        |       j                         S | S )Nznot a bytes object: %rrP   )_strict_bytestypebytesrU   warnDeprecationWarningr<   rH   )rC   s    r   _assert_is_bytesrd   [   sp    
{
CyE!A#;c#AA! J 
c%	.46H!L~''))Jr   c                   ,    e Zd Zed        Zed        Zy)StrcmpRewritec                 2    d|z  }|d|d| d|dz  }||fS )Nzstreq_%dz
static inline bool z?(char const *ignored, uintptr_t str) {
        char needle[] = z1;
        char haystack[sizeof(needle)];
        z(&haystack, sizeof(haystack), (void *)str);
        for (int i = 0; i < sizeof(needle) - 1; ++i) {
                if (needle[i] != haystack[i]) {
                        return false;
                }
        }
        return true;
}
        r   )stringprobe_read_funcstreq_functionsprobeidfnames        r   _generate_streq_functionz&StrcmpRewrite._generate_streq_functionf   s3     W$ fo/ 	/ o%%r   c                 0   |rd}nd}t        j                  ||       }|D ]m  }|j                  d      }	d}
|s!|j                  d      j                         |v rd}
t        j                  |	|
||      \  }}|dz  }| j                  d|d      } o | ||d}|S )	NzSTRCMP\("([^"]+)\",(.+?)\)zSTRCMP\(("[^"]+\"),(.+?)\)r   bpf_probe_readrP   bpf_probe_read_userSTRCMP)exprrj   rk   )refinditergroupstriprf   rm   replace)rr   bin_cmpis_userprobe_user_listrj   rk   	STRCMP_REmatchesmatchrh   ri   rl   rdicts                r   rewrite_exprzStrcmpRewrite.rewrite_expry   s     8I7I++i. 	4E[[^F.O A$$&/9&;O%2%K%K,2O,;W&F"E? qLG<<%3D	4 .

 r   N)rK   rL   rM   staticmethodrm   r   r   r   r   rf   rf   e   s(    & &$  r   rf   )NN)ctypesr&   r?   rR   rU   rs   libbccr   r   r    r"   r/   getfilesystemencodingrA   stdoutr:   objectr<   r]   r_   rd   rf   r   r   r   <module>r      sx     
   	 =?8
 /S..0 ::!  (Q .F .r   