示例#1
0
void freeValue(Value *v) {
#ifdef DEBUG_GC
  printf("freeing %s @ %p\n", valueToString(v), v);
#endif
  switch (v->type) {
    case CLOSURE_VALUE_TYPE:
      freeClosure((Closure *)v->data);
      freeClosureValueC++;
      break;
    case ENV_VALUE_TYPE:
      freeEnv((Env *)v->data);
      freeEnvValueC++;
      break;
    case LIST_VALUE_TYPE:
      freeList((List *)v->data);
      freeListValueC++;
      break;
    case STRING_VALUE_TYPE:
      tlFree((char *)v->data);
      freeStringValueC++;
      break;
    case INT_VALUE_TYPE: {
      freeIntValueC++;
      break;
    }
    case BUILTIN_FUN_VALUE_TYPE:
      freeBuiltinFunC++;
      break;
    case NONE_VALUE_TYPE:
      return;  // none is never freed
    default:
      error("unkonwn value type passed to freeValue: %d\n", v->type);
  }
  v->type = NONE_VALUE_TYPE;
}
示例#2
0
void
SetupDisplay (struct display *d)
{
    char	**env = NULL;

    if (d->setup && d->setup[0]) {
	env = systemEnv (d, (char *) 0, (char *) 0);
	(void) source (env, d->setup);
	freeEnv (env);
    }
}
示例#3
0
文件: session.c 项目: cz172638/wdm
void
LoadXloginResources (struct display *d)
{
    char	**args;
    char	**env = 0;

    if (d->resources[0] && access (d->resources, 4) == 0) {
	env = systemEnv (d, (char *) 0, (char *) 0);
	args = parseArgs ((char **) 0, d->xrdb);
	args = parseArgs (args, d->resources);
	Debug ("Loading resource file: %s\n", d->resources);
	(void) runAndWait (args, env);
	freeArgs (args);
	freeEnv (env);
    }
}