module FakeFS::Dir::Tmpname

def create(basename, *rest)

def create(basename, *rest)
  if (opts = Hash.try_convert(rest[-1]))
    opts = opts.dup if rest.pop.equal?(opts)
    max_try = opts.delete(:max_try)
  else
    opts = {}
  end
  tmpdir, = *rest
  tmpdir ||= self.tmpdir
  Dir.mkdir(tmpdir) unless Dir.exist?(tmpdir)
  n = nil
  begin
    path = File.join(tmpdir, make_tmpname(basename, n))
    yield(path, n, opts)
  rescue Errno::EEXIST
    n ||= 0
    n += 1
    retry if !max_try || n < max_try
    raise "cannot generate temporary name using `#{basename}' " \
      "under `#{tmpdir}'"
  end
  path
end

def make_tmpname(prefix_suffix, suffix)

def make_tmpname(prefix_suffix, suffix)
  case prefix_suffix
  when String
    prefix = prefix_suffix
    suffix = ''
  when Array
    prefix = prefix_suffix[0]
    suffix = prefix_suffix[1]
  else
    raise ArgumentError, "unexpected prefix_suffix: #{prefix_suffix.inspect}"
  end
  t = Time.now.strftime('%Y%m%d')
  path = "#{prefix}#{t}-#{$$}-#{rand(0x100000000).to_s(36)}"
  path << "-#{suffix}" if suffix
  path << suffix
end

def tmpdir

def tmpdir
  Dir.tmpdir
end