#!/usr/bin/env python
# encoding: utf-8
'''
Module containing functions shared between multiple AFL modules

@author:     Christian Holler (:decoder)

@license:

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

@contact:    choller@mozilla.com
'''

from __future__ import print_function
import random
import os
import re

def randel(l):
    if not l:
        return None
    return l[random.randint(0,len(l)-1)]

def randel_pop(l):
    if not l:
        return None
    return l.pop(random.randint(0,len(l)-1))

def write_exc_example(data, exc):
    exc_name = re.sub(r'[^a-zA-Z0-9]', '_', repr(exc))
    
    if not os.path.exists(exc_name):
        with open(exc_name, 'w') as f:
            f.write(data)    
