Current File : //proc/self/root/usr/local/lib/python3.6/site-packages/ptrace/__pycache__/tools.cpython-36.pyc
3

�dH�@s�ddlmZddlmZmZmZddlmZmZddlm	Z	m
Z
mZmZm
Z
ddlmZmZmZmZdd�Zdd	�Zd
efdd�Zejd�ejd�Zed
dd�Zdd�Zdd�Zdd�Zdd�Zdd�Z d
S)�)�sizeof)�formatUintHex16�formatUintHex32�
formatWordHex)�datetime�	timedelta)�getenv�access�X_OK�pathsep�getcwd)�join�isabs�dirname�normpathcCs�tdd�|jD��}d|}xh|jD]^\}}t||�}||}t|�dkrTt|�}nt|�dkrjt|�}nt|�}|d||f�q$WdS)zA
    Dump all registers using log callback (write one line).
    css|]\}}t|�VqdS)N)�len)�.0�name�type�r�5/tmp/pip-build-in2aja_b/python-ptrace/ptrace/tools.py�	<genexpr>szdumpRegs.<locals>.<genexpr>z%% %us� �z%s = %sN)�max�_fields_�getattrrrrr)�log�regs�widthZname_formatrr�valuerrr�dumpRegss


r!cCsJg}x.|D]&\}}||@sq
|j|�||@}q
W|rF|jt|��|S)a>
    Extract bits from the integer value using a list of bit masks.
    bitmasks is a list of tuple (mask, text).

    >>> bitmask = (
    ...    (1, "exec"),
    ...    (2, "write"),
    ...    (4, "read"))
    ...
    >>> readBits(5, bitmask)
    ['exec', 'read']
    >>> readBits(12, bitmask)
    ['read', '8']
    )�append�str)r �bitmasksZbitset�mask�itemrrr�readBitss
r'NcCsL|}t||�}|r8ddj|�}|r4d|||�f}|S|r@|St|�SdS)aI
    Format a value using a bitmask: see readBits() functions.

    >>> bitmask = (
    ...    (1, "exec"),
    ...    (2, "write"),
    ...    (4, "read"))
    ...
    >>> formatBits(5, bitmask, empty_text="no permission")
    '<exec|read> (5)'
    >>> formatBits(0, bitmask, empty_text="no permission")
    'no permission'
    z%s�|z	<%s> (%s)N)r'r
r#)r r$Z
empty_textZformat_valueZ
orig_value�textrrr�
formatBits4s
r*i��cCstt|d�}|r|t7}|S)a�
    Convert an UNIX (32-bit) timestamp to datetime object. Timestamp value
    is the number of seconds since the 1st January 1970 at 00:00. Maximum
    value is 2147483647: 19 january 2038 at 03:14:07.

    May raise ValueError for invalid value: value have to be in 0..2147483647.

    >>> timestampUNIX(0, False)
    datetime.datetime(1970, 1, 1, 0, 0)
    >>> timestampUNIX(1154175644.37, False)
    datetime.datetime(2006, 7, 29, 12, 20, 44, 370000)
    )�seconds)�UNIX_TIMESTAMP_T0r�LOCAL_TIMEZONE_OFFSET)r �is_local�	timestamprrr�
timestampUNIXXs
r1cCslt|�r|St|�r,tt�|�}t|�}|Std�}|s<|Sx*|jt�D]}t||�}t|t	�rH|SqHW|S)z�
    Locate a program using the PATH environment variable. Return the
    unchanged program value if it's not possible to get the full
    program path.
    �PATH)
rr�	path_joinrrr�splitrr	r
)Zprogram�paths�path�filenamerrr�
locateProgramks

r8cCstt||�|�S)z�
    Restrict value to [min_value; max_value]

    >>> minmax(-2, -3, 10)
    -2
    >>> minmax(-2, 27, 10)
    10
    >>> minmax(-2, 0, 10)
    0
    )�minr)Z	min_valuer Z	max_valuerrr�minmax�sr:cCs&i}x|j�D]\}}|||<qW|S)zs
    Inverse a dictionary.

    >>> inverseDict({"0x10": 16, "0x20": 32}) == {32: '0x20', 16: '0x10'}
    True
    )�items)�data�result�keyr rrr�inverseDict�sr?cCsd|S)z�
    Converts a signal number to an exit code.
    UNIX: https://www.gnu.org/software/bash/manual/html_node/Exit-Status.html

    >>> import signal
    >>> signal_to_exitcode(signal.SIGQUIT)
    131
    �r)�signumrrr�signal_to_exitcode�s	rB)!�ctypesrZptrace.ctypes_toolsrrrrr�osrr	r
rr�os.pathr
r3rrrr!r'r#r*�
fromtimestamp�utcfromtimestampr.r-r1r8r:r?rBrrrr�<module>s