???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
:)g                 @   s   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d Zdd Z	dd	 Z
d
d Zej ZejdfddZG dd deZdddZdZdd ZG dd deZdS )    N   )libc             C   s   g }t | d|}|j }xl|jdD ]^}|jd}|dkrJ|jt| q$t|d | }t||d d  }|jt||d  q$W W d Q R X |S )Nr,-r   )openreadsplitfindappendintextendrange)pathZcpusfZcpus_range_strZ	cpu_rangeZrangeopstartend r   /usr/lib/python3.6/utils.py_read_cpu_range   s    
"r   c               C   s   t dS )Nz/sys/devices/system/cpu/online)r   r   r   r   r   get_online_cpus$   s    r   c               C   s   t dS )Nz /sys/devices/system/cpu/possible)r   r   r   r   r   get_possible_cpus'   s    r   c             C   s.   t j|}tj|tjjj }|| kr*|S d S )N)r   Zbcc_procutils_languagectcastZc_char_pvaluedecode)Z
candidatespidresZlanguager   r   r   detect_language*   s    
r   c             C   s8   t |dr|jn|}|j|  |r,|jd |j  dS )zA
    printb(s)

    print a bytes object to stdout and flush
    buffer   
N)hasattrr    writeflush)sfilenlZbufr   r   r   printb1   s
    

r(   c               @   s(   e Zd ZdZdd Zdd Zdd ZdS )		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             C   s&   t jd dkr|| _n|jt| _d S )Nr      )sysversion_infor%   r   FILESYSTEMENCODING)selfargr   r   r   __init__F   s    zArgString.__init__c             C   s   | j jtS )N)r%   encoder-   )r.   r   r   r   	__bytes__L   s    zArgString.__bytes__c             C   s   | j S )N)r%   )r.   r   r   r   __str__O   s    zArgString.__str__N)__name__
__module____qualname____doc__r0   r2   r3   r   r   r   r   r)   >   s   r)   c             C   sD   t |dr|ntj}tjtjd|d |jtj| |||| d S )Nr#      )r   r&   )	r"   r+   stderr	tracebackprint_stack	_getframer#   warningsformatwarning)messagecategoryfilenamelinenor&   linelogr   r   r   warn_with_tracebackR   s    rE   Fc             C   sX   | d kr| S t r*t| tksTtd|  n*t| tk	rTtjd|  td t| j S | S )Nznot a bytes object: %rr8   )	_strict_bytestypebytesAssertionErrorr=   warnDeprecationWarningr)   r2   )r/   r   r   r   _assert_is_bytes[   s    rL   c               @   s$   e Zd Zedd Zedd ZdS )StrcmpRewritec             C   s"   d| }|d|| |f 7 }||fS )Nzstreq_%da~  
static inline bool %s(char const *ignored, uintptr_t str) {
        char needle[] = %s;
        char haystack[sizeof(needle)];
        %s(&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fnamer   r   r   _generate_streq_functionf   s    z&StrcmpRewrite._generate_streq_functionc             C   s   |r
d}nd}t j|| }x^|D ]V}|jd}	d}
|sH|jdj |krLd}
tj|	|
||\}}|d7 }| jd|d} q W | ||d}|S )	NzSTRCMP\("([^"]+)\",(.+?)\)zSTRCMP\(("[^"]+\"),(.+?)\)r   Zbpf_probe_readr8   Zbpf_probe_read_userZSTRCMP)exprrP   rQ   )refinditergroupstriprM   rS   replace)rT   Zbin_cmpZis_userZprobe_user_listrP   rQ   Z	STRCMP_REZmatchesmatchrN   rO   rR   Zrdictr   r   r   rewrite_expry   s&    

zStrcmpRewrite.rewrite_exprN)r4   r5   r6   staticmethodrS   r[   r   r   r   r   rM   e   s   rM   )NN)Zctypesr   r+   r:   r=   rU   Zlibbccr   r   r   r   r   getfilesystemencodingr-   stdoutr(   objectr)   rE   rF   rL   rM   r   r   r   r   <module>   s    

