new constant SINGLE_PARTITION_TYPE to improve code testing

This commit is contained in:
Christophe Grenier 2022-11-16 07:45:33 +01:00
parent 1c05a14387
commit 1c09ffcb6f
11 changed files with 98 additions and 16 deletions

View file

@ -25,6 +25,7 @@
#endif #endif
#include <stdio.h> #include <stdio.h>
#include <assert.h>
#include "types.h" #include "types.h"
#include "common.h" #include "common.h"
#include "parti386.h" #include "parti386.h"
@ -35,28 +36,52 @@
#include "partxbox.h" #include "partxbox.h"
#include "addpart.h" #include "addpart.h"
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_GPT)
extern const arch_fnct_t arch_gpt; extern const arch_fnct_t arch_gpt;
extern const arch_fnct_t arch_i386; #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
extern const arch_fnct_t arch_humax; extern const arch_fnct_t arch_humax;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_I386)
extern const arch_fnct_t arch_i386;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_MAC)
extern const arch_fnct_t arch_mac; extern const arch_fnct_t arch_mac;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_SUN)
extern const arch_fnct_t arch_sun; extern const arch_fnct_t arch_sun;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_XBOX)
extern const arch_fnct_t arch_xbox; extern const arch_fnct_t arch_xbox;
#endif
list_part_t *add_partition_cli(disk_t *disk, list_part_t *list_part, char **current_cmd) list_part_t *add_partition_cli(disk_t *disk, list_part_t *list_part, char **current_cmd)
{ {
if(*current_cmd==NULL) assert(current_cmd!=NULL);
return list_part; /*@ assert valid_read_string(*current_cmd); */
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_GPT)
if(disk->arch==&arch_gpt) if(disk->arch==&arch_gpt)
return add_partition_gpt_cli(disk, list_part, current_cmd); return add_partition_gpt_cli(disk, list_part, current_cmd);
else if(disk->arch==&arch_i386) #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_I386)
if(disk->arch==&arch_i386)
return add_partition_i386_cli(disk, list_part, current_cmd); return add_partition_i386_cli(disk, list_part, current_cmd);
else if(disk->arch==&arch_humax) #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
if(disk->arch==&arch_humax)
return add_partition_humax_cli(disk, list_part, current_cmd); return add_partition_humax_cli(disk, list_part, current_cmd);
else if(disk->arch==&arch_mac) #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_MAC)
if(disk->arch==&arch_mac)
return add_partition_mac_cli(disk, list_part, current_cmd); return add_partition_mac_cli(disk, list_part, current_cmd);
else if(disk->arch==&arch_sun) #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_SUN)
if(disk->arch==&arch_sun)
return add_partition_sun_cli(disk, list_part, current_cmd); return add_partition_sun_cli(disk, list_part, current_cmd);
else if(disk->arch==&arch_xbox) #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_XBOX)
if(disk->arch==&arch_xbox)
return add_partition_xbox_cli(disk, list_part, current_cmd); return add_partition_xbox_cli(disk, list_part, current_cmd);
#endif
return list_part; return list_part;
} }

View file

@ -27,18 +27,30 @@
#include "common.h" #include "common.h"
#include "autoset.h" #include "autoset.h"
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_GPT)
extern const arch_fnct_t arch_gpt; extern const arch_fnct_t arch_gpt;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
extern const arch_fnct_t arch_humax; extern const arch_fnct_t arch_humax;
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_MAC)
extern const arch_fnct_t arch_mac; extern const arch_fnct_t arch_mac;
#endif
void autoset_unit(disk_t *disk) void autoset_unit(disk_t *disk)
{ {
if(disk==NULL) if(disk==NULL)
return ; return ;
if( if(
disk->arch==&arch_mac || #if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_GPT)
disk->arch==&arch_gpt || disk->arch==&arch_gpt ||
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
disk->arch==&arch_humax || disk->arch==&arch_humax ||
#endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_MAC)
disk->arch==&arch_mac ||
#endif
(disk->geom.heads_per_cylinder==1 && disk->geom.sectors_per_head==1)) (disk->geom.heads_per_cylinder==1 && disk->geom.sectors_per_head==1))
disk->unit=UNIT_SECTOR; disk->unit=UNIT_SECTOR;
else else

View file

@ -20,6 +20,7 @@
*/ */
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_I386)
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -35,4 +36,4 @@ int write_part_gpt(disk_t *disk_car, const list_part_t *list_part, const int ro,
return -1; return -1;
return 0; return 0;
} }
#endif

View file

@ -20,7 +20,7 @@
*/ */
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_GPT)
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -310,3 +310,4 @@ int write_part_gpt(disk_t *disk_car, const list_part_t *list_part, const int ro,
disk_car->sync(disk_car); disk_car->sync(disk_car);
return 0; return 0;
} }
#endif

View file

@ -20,7 +20,7 @@
*/ */
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -362,3 +362,4 @@ static const char *get_partition_typename_humax(const partition_t *partition)
{ {
return "Partition"; return "Partition";
} }
#endif

View file

@ -24,9 +24,20 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_HUMAX)
/*@
@ requires valid_disk(disk_car);
@ requires \valid_read(disk_car);
@ requires valid_list_part(list_part);
@ requires \valid(current_cmd);
@ requires separation: \separated(disk_car, list_part, current_cmd, *current_cmd);
@ requires valid_read_string(*current_cmd);
@*/
// ensures valid_list_part(\result);
// ensures valid_read_string(*current_cmd);
list_part_t *add_partition_humax_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd); list_part_t *add_partition_humax_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} /* closing brace for extern "C" */ } /* closing brace for extern "C" */
#endif #endif

View file

@ -21,6 +21,7 @@
*/ */
#ifndef _PARTI386_H #ifndef _PARTI386_H
#define _PARTI386_H #define _PARTI386_H
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_I386)
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
@ -56,3 +57,4 @@ int recover_i386_logical(disk_t *disk, const unsigned char *buffer, partition_t
} /* closing brace for extern "C" */ } /* closing brace for extern "C" */
#endif #endif
#endif #endif
#endif

View file

@ -24,9 +24,21 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_SUN)
/*@
@ requires valid_disk(disk_car);
@ requires \valid_read(disk_car);
@ requires valid_list_part(list_part);
@ requires \valid(current_cmd);
@ requires separation: \separated(disk_car, list_part, current_cmd, *current_cmd);
@ requires valid_read_string(*current_cmd);
@*/
// ensures valid_list_part(\result);
// ensures valid_read_string(*current_cmd);
list_part_t *add_partition_sun_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd); list_part_t *add_partition_sun_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} /* closing brace for extern "C" */ } /* closing brace for extern "C" */
#endif #endif

View file

@ -20,7 +20,7 @@
*/ */
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_XBOX)
#ifdef HAVE_CONFIG_H #ifdef HAVE_CONFIG_H
#include <config.h> #include <config.h>
#endif #endif
@ -389,3 +389,4 @@ static const char *get_partition_typename_xbox(const partition_t *partition)
{ {
return get_partition_typename_xbox_aux(partition->part_type_xbox); return get_partition_typename_xbox_aux(partition->part_type_xbox);
} }
#endif

View file

@ -25,6 +25,7 @@
#ifdef __cplusplus #ifdef __cplusplus
extern "C" { extern "C" {
#endif #endif
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_XBOX)
struct xbox_partition struct xbox_partition
{ {
@ -33,8 +34,19 @@ struct xbox_partition
uint32_t bootnbr; uint32_t bootnbr;
} __attribute__ ((gcc_struct, __packed__)); } __attribute__ ((gcc_struct, __packed__));
/*@
@ requires valid_disk(disk_car);
@ requires \valid_read(disk_car);
@ requires valid_list_part(list_part);
@ requires \valid(current_cmd);
@ requires separation: \separated(disk_car, list_part, current_cmd, *current_cmd);
@ requires valid_read_string(*current_cmd);
@*/
// ensures valid_list_part(\result);
// ensures valid_read_string(*current_cmd);
list_part_t *add_partition_xbox_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd); list_part_t *add_partition_xbox_cli(const disk_t *disk_car,list_part_t *list_part, char **current_cmd);
#endif
#ifdef __cplusplus #ifdef __cplusplus
} /* closing brace for extern "C" */ } /* closing brace for extern "C" */
#endif #endif

View file

@ -39,7 +39,9 @@
#include "log_part.h" #include "log_part.h"
#define SUN_LABEL_MAGIC 0xDABE #define SUN_LABEL_MAGIC 0xDABE
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_SUN)
extern const arch_fnct_t arch_sun; extern const arch_fnct_t arch_sun;
#endif
static void set_sun_info_i386(partition_t *partition); static void set_sun_info_i386(partition_t *partition);
static int test_sun_i386(const disk_t *disk_car, const sun_partition_i386 *sunlabel, const partition_t *partition, const int verbose); static int test_sun_i386(const disk_t *disk_car, const sun_partition_i386 *sunlabel, const partition_t *partition, const int verbose);
@ -73,6 +75,7 @@ static int test_sun_i386(const disk_t *disk_car, const sun_partition_i386 *sunla
offset2cylinder(disk_car,partition->part_offset), offset2cylinder(disk_car,partition->part_offset),
offset2head(disk_car,partition->part_offset), offset2head(disk_car,partition->part_offset),
offset2sector(disk_car,partition->part_offset)); offset2sector(disk_car,partition->part_offset));
#if !defined(SINGLE_PARTITION_TYPE) || defined(SINGLE_PARTITION_SUN)
{ {
int i; int i;
partition_t *new_partition=partition_new(NULL); partition_t *new_partition=partition_new(NULL);
@ -93,6 +96,7 @@ static int test_sun_i386(const disk_t *disk_car, const sun_partition_i386 *sunla
} }
free(new_partition); free(new_partition);
} }
#endif
return 0; return 0;
} }