Example #1
0
int
read_config (char *configFile)
{
  FILE *file = fopen (configFile, "r");
  int i = 0, rc = 0, index = 0;
  char line[500], temp[100], *ptr;

  fprintf(fp,"Begin read_config()\n");
  fflush(fp);	
	
  keys = 0;
  if (file == NULL)
    {
      write_empty (configFile);
      file = fopen (configFile, "r");
    }

  if (file != NULL)
    {
      while (fgets (line, sizeof line, file) != NULL)
	{
	  ptr = strchr (line, '=');

	  if (ptr == NULL)
	    return 1;

	  index = ptr - line - 1;
	  printf ("This is the name length: %d\n", index);

	  strncpy (name[keys], line, index + 1);
	  name[keys][index + 1] = '\0';

	  index = strlen (line) - index - 3;
	  printf ("This is the val length: %d\n", index);
	  strncpy (value[keys], ptr + 1, index);
	  value[keys][index] = '\0';

	  printf ("Name[%d]:%s,value[%d]=%s\n", keys, name[keys], keys,
		  value[keys]);
	  keys++;
	}
      printf ("Config items length in read_config:%d\n", keys);
      fclose (file);
      return 0;
    }

	fprintf(fp,"End read_config()\n");
	fflush(fp);	
	
  return 1;
}
Example #2
0
bool SDCardCreate(u64 disk_size /*in MB*/, const std::string& filename)
{
	u32 sectors_per_fat;
	u32 sectors_per_disk;

	// Convert MB to bytes
	disk_size *= 1024 * 1024;

	if (disk_size < 0x800000 || disk_size > 0x800000000ULL)
	{
		ERROR_LOG(COMMON, "Trying to create SD Card image of size %" PRIu64 "MB is out of range (8MB-32GB)", disk_size / (1024 * 1024));
		return false;
	}

	// Pretty unlikely to overflow.
	sectors_per_disk = (u32)(disk_size / 512);
	sectors_per_fat = get_sectors_per_fat(disk_size, get_sectors_per_cluster(disk_size));

	boot_sector_init(s_boot_sector, s_fsinfo_sector, disk_size, nullptr);
	fat_init(s_fat_head);

	File::IOFile file(filename, "wb");
	FILE* const f = file.GetHandle();
	if (!f)
	{
		ERROR_LOG(COMMON, "Could not create file '%s', aborting...", filename.c_str());
		return false;
	}

	/* Here's the layout:
	*
	*  boot_sector
	*  fsinfo_sector
	*  empty
	*  backup boot sector
	*  backup fsinfo sector
	*  RESERVED_SECTORS - 4 empty sectors (if backup sectors), or RESERVED_SECTORS - 2 (if no backup)
	*  first fat
	*  second fat
	*  zero sectors
	*/

	if (write_sector(f, s_boot_sector))
		goto FailWrite;

	if (write_sector(f, s_fsinfo_sector))
		goto FailWrite;

	if (BACKUP_BOOT_SECTOR > 0)
	{
		if (write_empty(f, BACKUP_BOOT_SECTOR - 2))
			goto FailWrite;

		if (write_sector(f, s_boot_sector))
			goto FailWrite;

		if (write_sector(f, s_fsinfo_sector))
			goto FailWrite;

		if (write_empty(f, RESERVED_SECTORS - 2 - BACKUP_BOOT_SECTOR))
			goto FailWrite;
	}
	else
	{
		if (write_empty(f, RESERVED_SECTORS - 2)) goto FailWrite;
	}

	if (write_sector(f, s_fat_head))
		goto FailWrite;

	if (write_empty(f, sectors_per_fat - 1))
		goto FailWrite;

	if (write_sector(f, s_fat_head))
		goto FailWrite;

	if (write_empty(f, sectors_per_fat - 1))
		goto FailWrite;

	if (write_empty(f, sectors_per_disk - RESERVED_SECTORS - 2 * sectors_per_fat))
		goto FailWrite;

	return true;

FailWrite:
	ERROR_LOG(COMMON, "Could not write to '%s', aborting...", filename.c_str());
	if (unlink(filename.c_str()) < 0)
		ERROR_LOG(COMMON, "unlink(%s) failed: %s", filename.c_str(), GetLastErrorMsg().c_str());
	return false;
}
Example #3
0
int  main( int argc, char**  argv )
{
    Wide   disk_size;
    int    sectors_per_fat;
    int    sectors_per_disk;
    char*  end;
    const char*  label = NULL;
    FILE*  f = NULL;

    for ( ; argc > 1 && argv[1][0] == '-'; argc--, argv++ )
    {
        char*  arg = argv[1] + 1;
        switch (arg[0]) {
            case 'l':
                if (arg[1] != 0)
                    arg += 2;
                else {
                    argc--;
                    argv++;
                    if (argc <= 1)
                        usage();
                    arg = argv[1];
                }
                label = arg;
                break;

            default:
                usage();
        }
    }

    if (argc != 3)
        usage();

    disk_size = strtoll( argv[1], &end, 10 );
    if (disk_size < 0 || (disk_size == 0 && (errno == EINVAL || errno == ERANGE))) {
        fprintf(stderr, "Invalid argument size '%s'\n\n", argv[1]);
        usage();
    }

    if (*end == 'K')
        disk_size *= 1024;
    else if (*end == 'M')
        disk_size *= 1024*1024;
    else if (*end == 'G')
        disk_size *= 1024*1024*1024;

    if (disk_size < 9*1024*1024) {
        fprintf(stderr, "Invalid argument: size '%s' is too small.\n\n", argv[1]);
        usage();
    } else if (disk_size > MAX_DISK_SIZE) {
        fprintf(stderr, "Invalid argument: size '%s' is too large.\n\n", argv[1]);
        usage();
    }

    sectors_per_disk = disk_size / BYTES_PER_SECTOR;
    sectors_per_fat  = get_sectors_per_fat( disk_size, get_sectors_per_cluster( disk_size ) );

    boot_sector_init( s_boot_sector, s_fsinfo_sector, disk_size, NULL );
    fat_init( s_fat_head );

    f = fopen( argv[2], "wb" );
    if ( !f ) {
      fprintf(stderr, "Could not create file '%s': %s\n", argv[2], strerror(errno));
      goto FailWrite;
    }

   /* here's the layout:
    *
    *  boot_sector
    *  fsinfo_sector
    *  empty
    *  backup boot sector
    *  backup fsinfo sector
    *  RESERVED_SECTORS - 4 empty sectors (if backup sectors), or RESERVED_SECTORS - 2 (if no backup)
    *  first fat
    *  second fat
    *  zero sectors
   */

    if ( write_sector( f, s_boot_sector ) ) goto FailWrite;
    if ( write_sector( f, s_fsinfo_sector ) ) goto FailWrite;
    if ( BACKUP_BOOT_SECTOR > 0 ) {
        if ( write_empty( f, BACKUP_BOOT_SECTOR - 2 ) ) goto FailWrite;
        if ( write_sector( f, s_boot_sector ) ) goto FailWrite;
        if ( write_sector( f, s_fsinfo_sector ) ) goto FailWrite;
        if ( write_empty( f, RESERVED_SECTORS - 2 - BACKUP_BOOT_SECTOR ) ) goto FailWrite;
    }
    else if ( write_empty( f, RESERVED_SECTORS - 2 ) ) goto FailWrite;

    if ( write_sector( f, s_fat_head ) ) goto FailWrite;
    if ( write_empty( f, sectors_per_fat-1 ) ) goto FailWrite;

    if ( write_sector( f, s_fat_head ) ) goto FailWrite;
    if ( write_empty( f, sectors_per_fat-1 ) ) goto FailWrite;

    if ( write_empty( f, sectors_per_disk - RESERVED_SECTORS - 2*sectors_per_fat ) ) goto FailWrite;

    fclose(f);
    return 0;

FailWrite:
    if (f != NULL) {
      fclose(f);
      unlink( argv[2] );
      fprintf(stderr, "File '%s' was not created.\n", argv[2]);
    }
    return 1;
}