Skip to content

Commit 29cf559

Browse files
authored
llama : define magic numbers as integer constants (#1518) (#1520)
The underlying representation of multibyte character literals is implementation-defined. This could, at least in principle, cause cross-build data export/import issues independent of endianness. Define magic numbers as integer literals to be on the safe side. Signed-off-by: Juuso Alasuutari <[email protected]>
1 parent 3de84b2 commit 29cf559

File tree

2 files changed

+30
-20
lines changed

2 files changed

+30
-20
lines changed

llama.cpp

Lines changed: 21 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -427,26 +427,30 @@ struct llama_file_loader {
427427
}
428428
void read_magic() {
429429
uint32_t magic = file.read_u32();
430-
uint32_t version = 0;
431430

432-
if (magic != 'ggml') {
433-
version = file.read_u32();
431+
if (magic == LLAMA_FILE_MAGIC_GGML) {
432+
file_version = LLAMA_FILE_VERSION_GGML;
433+
return;
434434
}
435435

436-
if (magic == 'ggml' && version == 0) {
437-
file_version = LLAMA_FILE_VERSION_GGML;
438-
} else if (magic == 'ggmf' && version == 1) {
439-
file_version = LLAMA_FILE_VERSION_GGMF_V1;
440-
} else if (magic == 'ggjt' && version == 1) {
441-
file_version = LLAMA_FILE_VERSION_GGJT_V1;
442-
} else if (magic == 'ggjt' && version == 2) {
443-
file_version = LLAMA_FILE_VERSION_GGJT_V2;
444-
} else if (magic == 'ggjt' && version == 3) {
445-
file_version = LLAMA_FILE_VERSION_GGJT_V3;
446-
} else {
447-
throw format("unknown (magic, version) combination: %08x, %08x; is this really a GGML file?",
448-
magic, version);
436+
uint32_t version = file.read_u32();
437+
438+
switch (magic) {
439+
case LLAMA_FILE_MAGIC_GGMF:
440+
switch (version) {
441+
case 1: file_version = LLAMA_FILE_VERSION_GGMF_V1; return;
442+
}
443+
break;
444+
case LLAMA_FILE_MAGIC_GGJT:
445+
switch (version) {
446+
case 1: file_version = LLAMA_FILE_VERSION_GGJT_V1; return;
447+
case 2: file_version = LLAMA_FILE_VERSION_GGJT_V2; return;
448+
case 3: file_version = LLAMA_FILE_VERSION_GGJT_V3; return;
449+
}
449450
}
451+
452+
throw format("unknown (magic, version) combination: %08x, %08x; is this really a GGML file?",
453+
magic, version);
450454
}
451455
void read_hparams() {
452456
hparams.n_vocab = file.read_u32();
@@ -2290,7 +2294,7 @@ int llama_apply_lora_from_file_internal(struct llama_context * ctx, const char *
22902294
{
22912295
uint32_t magic;
22922296
fin.read((char *) &magic, sizeof(magic));
2293-
if (magic != 'ggla') {
2297+
if (magic != LLAMA_FILE_MAGIC_GGLA) {
22942298
fprintf(stderr, "%s: bad file magic\n", __func__);
22952299
return 1;
22962300
}

llama.h

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,16 @@
1919
# define LLAMA_API
2020
#endif
2121

22+
#define LLAMA_FILE_MAGIC_GGJT 0x67676a74u // 'ggjt'
23+
#define LLAMA_FILE_MAGIC_GGLA 0x67676c61u // 'ggla'
24+
#define LLAMA_FILE_MAGIC_GGMF 0x67676d66u // 'ggmf'
25+
#define LLAMA_FILE_MAGIC_GGML 0x67676d6cu // 'ggml'
26+
#define LLAMA_FILE_MAGIC_GGSN 0x6767736eu // 'ggsn'
27+
2228
#define LLAMA_FILE_VERSION 3
23-
#define LLAMA_FILE_MAGIC 'ggjt'
24-
#define LLAMA_FILE_MAGIC_UNVERSIONED 'ggml'
25-
#define LLAMA_SESSION_MAGIC 'ggsn'
29+
#define LLAMA_FILE_MAGIC LLAMA_FILE_MAGIC_GGJT
30+
#define LLAMA_FILE_MAGIC_UNVERSIONED LLAMA_FILE_MAGIC_GGML
31+
#define LLAMA_SESSION_MAGIC LLAMA_FILE_MAGIC_GGSN
2632
#define LLAMA_SESSION_VERSION 1
2733

2834
#ifdef __cplusplus

0 commit comments

Comments
 (0)