Beispiel #1
0
/* ====================================================================
 * Copy_option
 * underlying routine to copy odesc's to and from memory
 * returns number of bytes copied
 * ====================================================================*/
static INT
Copy_option(OPTION_DESC *odesc, char *container, BOOL save)
{
  void *var = ODESC_variable(odesc);
  size_t sz = 0;

  Is_True(ODESC_can_change_by_pragma(odesc),
	  ("Copy_option, trying to copy option that cannot change"));

  switch (ODESC_kind(odesc)) {
    case OVK_NONE:
    case OVK_BOOL:
      sz = sizeof(BOOL);
      break;
    case OVK_INT32:
    case OVK_UINT32:
      sz = sizeof(INT32);
      break;
    case OVK_INT64:
    case OVK_UINT64:
      sz = sizeof(INT64);
    case OVK_NAME:
    case OVK_SELF:
    case OVK_LIST:
      sz = sizeof(void *);
  }

  if (sz > 0) {
    if (save)
      memcpy(container, var, sz);
    else
      memcpy(var, container, sz);
  }
  return (sz);
}
Beispiel #2
0
/* ====================================================================
 * Copy_option
 * underlying routine to copy odesc's to and from memory
 * returns number of bytes copied
 * ====================================================================*/
static INT
Copy_option(OPTION_DESC *odesc, char *container, BOOL save)
{
  void *var = ODESC_variable(odesc);
  Is_True(ODESC_can_change_by_pragma(odesc),
	  ("Copy_option, trying to copy option that cannot change"));

  if (save) {
    switch (ODESC_kind(odesc)) {
      case OVK_NONE:
      case OVK_BOOL:
        *((BOOL *)container) = *((BOOL *)var);
	return sizeof(BOOL);
      case OVK_INT32:
	*((INT32 *)container) = *((INT32 *)var);
	return sizeof(INT32);
      case OVK_UINT32:
	*((UINT32 *)container) = *((UINT32 *)var);
	return sizeof(UINT32);
      case OVK_INT64:
	*((INT64 *)container) = *((INT64 *)var);
	return sizeof(INT64);
      case OVK_UINT64:
	*((UINT64 *)container) = *((UINT64 *)var);
	return sizeof(UINT64);
      case OVK_NAME:
      case OVK_SELF:
	*((char **)container) = *((char **)var);
	return sizeof(char *);
      case OVK_LIST:
	*((OPTION_LIST **)container) = *((OPTION_LIST **)var);
	return sizeof(OPTION_LIST *);
      default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
	return 0;
    }
  } else { /* restore */
    switch (ODESC_kind(odesc)) {
      case OVK_NONE:
      case OVK_BOOL:
        *((BOOL *)var) = *((BOOL *)container);
	return sizeof(BOOL);
      case OVK_INT32:
	*((INT32 *)var) = *((INT32 *)container);
	return sizeof(INT32);
      case OVK_UINT32:
	*((UINT32 *)var) = *((UINT32 *)container);
	return sizeof(UINT32);
      case OVK_INT64:
	*((INT64 *)var) = *((INT64 *)container);
	return sizeof(INT64);
      case OVK_UINT64:
	*((UINT64 *)var) = *((UINT64 *)container);
	return sizeof(UINT64);
      case OVK_NAME:
      case OVK_SELF:
	*((char **)var) = *((char **)container);
	return sizeof(char *);
      case OVK_LIST:
	*((OPTION_LIST **)var) = *((OPTION_LIST **)container);
	return sizeof(OPTION_LIST *);
      default: /* INVALID, OBSOLETE, REPLACED, UNIMPLEMENTED */
	return 0;
    }
  }
}