| Index: cgpt/cgpt.h
|
| diff --git a/cgpt/cgpt.h b/cgpt/cgpt.h
|
| index 1ef74de38f91f42660a94c431d50e8c6f9e0c760..9b0805cfb688c4984f1138e9b6fc3099b85009b5 100644
|
| --- a/cgpt/cgpt.h
|
| +++ b/cgpt/cgpt.h
|
| @@ -9,6 +9,8 @@
|
| #define _FILE_OFFSET_BITS 64
|
| #include <features.h>
|
| #include <stdint.h>
|
| +#include <stdio.h>
|
| +#include <stdlib.h>
|
| #include "endian.h"
|
| #include "gpt.h"
|
| #include "cgptlib.h"
|
| @@ -45,7 +47,7 @@ struct pmbr {
|
| uint8_t sig[2]; // 0x55, 0xaa
|
| } __attribute__((packed));
|
|
|
| -void PMBRToStr(struct pmbr *pmbr, char *str);
|
| +void PMBRToStr(struct pmbr *pmbr, char *str, unsigned int buflen);
|
|
|
| // Handle to the drive storing the GPT.
|
| struct drive {
|
| @@ -69,7 +71,7 @@ int CheckValid(const struct drive *drive);
|
| */
|
| #define GUID_STRLEN 37
|
| int StrToGuid(const char *str, Guid *guid);
|
| -void GuidToStr(const Guid *guid, char *str);
|
| +void GuidToStr(const Guid *guid, char *str, unsigned int buflen);
|
| int IsZero(const Guid *guid);
|
|
|
|
|
| @@ -77,33 +79,33 @@ int ReadPMBR(struct drive *drive);
|
| int WritePMBR(struct drive *drive);
|
|
|
|
|
| -/* Convert UTF16 string to UTF8. Rewritten from gpt utility.
|
| - * Caller must prepare enough space for UTF8. The rough estimation is:
|
| - *
|
| - * utf8 length = bytecount(utf16) * 1.5
|
| +/* Convert possibly unterminated UTF16 string to UTF8.
|
| + * Caller must prepare enough space for UTF8, which could be up to
|
| + * twice the number of UTF16 chars plus the terminating '\0'.
|
| */
|
| -void UTF16ToUTF8(const uint16_t *utf16, uint8_t *utf8);
|
| -/* Convert UTF8 string to UTF16. Rewritten from gpt utility.
|
| - * Caller must prepare enough space for UTF16. The conservative estimation is:
|
| - *
|
| - * utf16 bytecount = bytecount(utf8) / 3 * 4
|
| +void UTF16ToUTF8(const uint16_t *utf16, unsigned int maxinput,
|
| + uint8_t *utf8, unsigned int maxoutput);
|
| +/* Convert null-terminated UTF8 string to UTF16.
|
| + * Caller must prepare enough space for UTF16, including a terminating 0x0000
|
| */
|
| -void UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16);
|
| +void UTF8ToUTF16(const uint8_t *utf8, uint16_t *utf16, unsigned int maxoutput);
|
|
|
| /* Helper functions for supported GPT types. */
|
| int ResolveType(const Guid *type, char *buf);
|
| int SupportedType(const char *name, Guid *type);
|
| void PrintTypes(void);
|
| -void EntryDetails(GptEntry *entry, int index, int raw);
|
| +void EntryDetails(GptEntry *entry, uint32_t index, int raw);
|
|
|
| uint32_t GetNumberOfEntries(const GptData *gpt);
|
| -GptEntry *GetEntry(GptData *gpt, int secondary, int entry_index);
|
| -void SetPriority(GptData *gpt, int secondary, int entry_index, int priority);
|
| -int GetPriority(GptData *gpt, int secondary, int entry_index);
|
| -void SetTries(GptData *gpt, int secondary, int entry_index, int tries);
|
| -int GetTries(GptData *gpt, int secondary, int entry_index);
|
| -void SetSuccessful(GptData *gpt, int secondary, int entry_index, int success);
|
| -int GetSuccessful(GptData *gpt, int secondary, int entry_index);
|
| +GptEntry *GetEntry(GptData *gpt, int secondary, uint32_t entry_index);
|
| +void SetPriority(GptData *gpt, int secondary, uint32_t entry_index,
|
| + int priority);
|
| +int GetPriority(GptData *gpt, int secondary, uint32_t entry_index);
|
| +void SetTries(GptData *gpt, int secondary, uint32_t entry_index, int tries);
|
| +int GetTries(GptData *gpt, int secondary, uint32_t entry_index);
|
| +void SetSuccessful(GptData *gpt, int secondary, uint32_t entry_index,
|
| + int success);
|
| +int GetSuccessful(GptData *gpt, int secondary, uint32_t entry_index);
|
|
|
| uint8_t RepairHeader(GptData *gpt, const uint32_t valid_headers);
|
| uint8_t RepairEntries(GptData *gpt, const uint32_t valid_entries);
|
| @@ -127,5 +129,16 @@ int cmd_find(int argc, char *argv[]);
|
| #define ARRAY_COUNT(array) (sizeof(array)/sizeof((array)[0]))
|
| const char *GptError(int errnum);
|
|
|
| +// Size in chars of the GPT Entry's PartitionName field
|
| +#define GPT_PARTNAME_LEN 72
|
| +
|
| +/* The standard "assert" macro goes away when NDEBUG is defined. This doesn't.
|
| + */
|
| +#define require(A) do { \
|
| + if (!(A)) { \
|
| + fprintf(stderr, "condition (%s) failed at %s:%d\n", \
|
| + #A, __FILE__, __LINE__); \
|
| + exit(1); } \
|
| + } while (0)
|
|
|
| #endif // VBOOT_REFERENCE_UTILITY_CGPT_CGPT_H_
|
|
|