/*  -
   Copyright (C) 2006 Weongyo Jeong (weongyo@gmail.com)

This file is part of ROVM.

ROVM is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 2, or (at your option) any later
version.

ROVM is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING.  If not, write to the Free
Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA.  */

#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include <time.h>

#include "types.h"
#include "utils.h"

/**
   메모리 덤프 함수.
 */
void
dump_mem (char *r, int size)
{
  int i;

  for (i=0; i<size; i++)
    {
      fprintf (stderr, "0x%x ", r[i] & 0xff);
    }

  fprintf (stderr, "\n");
}

/**
   주어진 시간 T 만큼 sleep 을 한다.

   @param t	Sleep 할 시간.
 */
void 
rc_sleep (rc_interval_time_t t)
{
  apr_sleep (t);
}

/**
   현재 시작을 계산하여 반환한다.

   @return 현재 시각.
*/
rc_time_t 
rc_time_now (void)
{
  return apr_time_now ();
}

/**
   단순한 malloc wrapper.

   @param size	할당할 메모리 크기.
   @return	할당된 메모리를 반환한다.
 */
void *
rc_malloc (size)
     size_t size;
{
  return malloc (size);
}

void *
rc_realloc (ptr, size)
     void *ptr;
     size_t size;
{
  return realloc (ptr, size);
}

/**
   단순한 calloc wrapper

   @param nmemb	Element 크기
   @param size	바이트 크기
   @return	할당된 메모리를 반환한다.
 */
void *
rc_calloc (nmemb, size)
     size_t nmemb, size;
{
  return calloc (nmemb, size);
}

/**
   단순한 free wrapper.

   @param r	Release 가 필요한 메모리 포인터
 */
void
rc_free (r)
     void *r;
{
  free (r);
}

/**
   현재 시간을 output 한다.

   !주의! 메모리를 할당하지 않은 상태에서의 사용이기 때문에, printf () 에서와
   같은 직접적인 출력 부분에서만 써야 한다.  즉 반환후, 스택을 쓰기하는 operation
   이 일어나서는 안된다.

   @return	현재 시각을 반환한다.
*/
char *
get_current_timestr (void)
{
  time_t t;
  char *time_string;
  
  t = time (NULL);
  time_string = ctime (&t);
  time_string[strlen (time_string) - 1] = '\0';
  
  return time_string;
}

/**
   STRDUP 와 비슷한 역활을 하는 함수.

   @param p     복제할 문자열 시작 포인터
   @param l     복제할 문자열 길이
   @return      새로 복제된 문자열
 */
char *
rc_strndup (char *p, int l)
{
  char *ret;

  ret = (char *) rc_malloc (l + 1);
  if (!ret)
    return NULL;

  memcpy (ret, p, l);
  ret[l] = '\0';

  return ret;
}

/**
   문자열을 복사합니다. 
*/
char *
rc_strdup (char *p)
{
  return strdup (p);
}
