コード例 #1
0
ファイル: config_file.c プロジェクト: Ezio-PS/RetroArch
static void add_sub_conf(config_file_t *conf, char *line)
{
   char real_path[PATH_MAX_LENGTH];
   config_file_t         *sub_conf = NULL;
   char                      *path = extract_value(line, false);

   if (!path)
      return;

   add_include_list(conf, path);

   real_path[0] = '\0';

#ifdef _WIN32
   fill_pathname_resolve_relative(real_path, conf->path,
         path, sizeof(real_path));
#else
#ifndef __CELLOS_LV2__
   if (*path == '~')
   {
      const char *home = getenv("HOME");
      strlcpy(real_path, home ? home : "", sizeof(real_path));
      strlcat(real_path, path + 1, sizeof(real_path));
   }
   else
#endif
      fill_pathname_resolve_relative(real_path, conf->path,
            path, sizeof(real_path));
#endif

   sub_conf = (config_file_t*)
      config_file_new_internal(real_path, conf->include_depth + 1);
   if (!sub_conf)
   {
      free(path);
      return;
   }

   /* Pilfer internal list. */
   add_child_list(conf, sub_conf);
   config_file_free(sub_conf);
   free(path);
}
コード例 #2
0
ファイル: config_file.c プロジェクト: mmodahl/RetroArch
static void add_sub_conf(config_file_t *conf, char *line)
{
   char *path = extract_value(line, false);
   if (!path)
      return;

   add_include_list(conf, path);

   char real_path[PATH_MAX];

#ifdef _WIN32
   // Accomodate POSIX systems on Win32.
   bool is_full_path = *path == '/';

   if (is_full_path)
      strlcpy(real_path, path, sizeof(real_path));
   else
   {
      // Workaround GetFullPathName not existing on XDK.
      // : is not a valid element in a path name. (NTFS streams?)
      if (strchr(path, ':') == NULL)
      {
         strlcpy(real_path, conf->path, sizeof(real_path));
         char *split = strrchr(real_path, '/');
         if (!split)
            split = strrchr(real_path, '\\');

         split[1] = '\0';
         strlcat(real_path, path, sizeof(real_path));
      }
      else
         strlcpy(real_path, path, sizeof(real_path));
   }
#else
   if (*path == '/')
      strlcpy(real_path, path, sizeof(real_path));
#ifndef __CELLOS_LV2__
   else if (*path == '~')
   {
      const char *home = getenv("HOME");
      strlcpy(real_path, home ? home : "/", sizeof(real_path));
      strlcat(real_path, path + 1, sizeof(real_path));
   }
#endif
   else
   {
      strlcpy(real_path, conf->path, sizeof(real_path));
      char *split = strrchr(real_path, '/');
      if (split)
      {
         split[1] = '\0';
         strlcat(real_path, path, sizeof(real_path));
      }
      else
         strlcpy(real_path, path, sizeof(real_path));
   }
#endif

   config_file_t *sub_conf = config_file_new_internal(real_path, conf->include_depth + 1);
   if (!sub_conf)
   {
      free(path);
      return;
   }

   // Pilfer internal list. :D
   add_child_list(conf, sub_conf);
   config_file_free(sub_conf);
   free(path);
}