📄 field.c
字号:
*/int id3_field_settextencoding(union id3_field *field, enum id3_field_textencoding encoding){ assert(field); if (field->type != ID3_FIELD_TYPE_TEXTENCODING) return -1; id3_field_finish(field); field->number.value = encoding; return 0;}staticint set_latin1(union id3_field *field, id3_latin1_t const *latin1){ id3_latin1_t *data; if (latin1 == 0 || *latin1 == 0) data = 0; else { data = id3_latin1_duplicate(latin1); if (data == 0) return -1; } field->latin1.ptr = data; return 0;}/* * NAME: field->setlatin1() * DESCRIPTION: set the value of a latin1 field */int id3_field_setlatin1(union id3_field *field, id3_latin1_t const *latin1){ assert(field); if (field->type != ID3_FIELD_TYPE_LATIN1) return -1; id3_field_finish(field); if (latin1) { id3_latin1_t const *ptr; for (ptr = latin1; *ptr; ++ptr) { if (*ptr == '\n') return -1; } } return set_latin1(field, latin1);}/* * NAME: field->setfulllatin1() * DESCRIPTION: set the value of a full latin1 field */int id3_field_setfulllatin1(union id3_field *field, id3_latin1_t const *latin1){ assert(field); if (field->type != ID3_FIELD_TYPE_LATIN1FULL) return -1; id3_field_finish(field); return set_latin1(field, latin1);}staticint set_string(union id3_field *field, id3_ucs4_t const *string){ id3_ucs4_t *data; if (string == 0 || *string == 0) data = 0; else { data = id3_ucs4_duplicate(string); if (data == 0) return -1; } field->string.ptr = data; return 0;}/* * NAME: field->setstring() * DESCRIPTION: set the value of a string field */int id3_field_setstring(union id3_field *field, id3_ucs4_t const *string){ assert(field); if (field->type != ID3_FIELD_TYPE_STRING) return -1; id3_field_finish(field); if (string) { id3_ucs4_t const *ptr; for (ptr = string; *ptr; ++ptr) { if (*ptr == '\n') return -1; } } return set_string(field, string);}/* * NAME: field->setfullstring() * DESCRIPTION: set the value of a full string field */int id3_field_setfullstring(union id3_field *field, id3_ucs4_t const *string){ assert(field); if (field->type != ID3_FIELD_TYPE_STRINGFULL) return -1; id3_field_finish(field); return set_string(field, string);}/* * NAME: field->setstrings() * DESCRIPTION: set the value of a stringlist field */int id3_field_setstrings(union id3_field *field, unsigned int length, id3_ucs4_t **ptrs){ id3_ucs4_t **strings; unsigned int i; assert(field); if (field->type != ID3_FIELD_TYPE_STRINGLIST) return -1; id3_field_finish(field); if (length == 0) return 0; strings = malloc(length * sizeof(*strings)); if (strings == 0) return -1; for (i = 0; i < length; ++i) { strings[i] = id3_ucs4_duplicate(ptrs[i]); if (strings[i] == 0) { while (i--) free(strings[i]); free(strings); return -1; } } field->stringlist.strings = strings; field->stringlist.nstrings = length; return 0;}/* * NAME: field->addstring() * DESCRIPTION: add a string to a stringlist field */int id3_field_addstring(union id3_field *field, id3_ucs4_t const *string){ id3_ucs4_t *new, **strings; assert(field); if (field->type != ID3_FIELD_TYPE_STRINGLIST) return -1; if (string == 0) string = id3_ucs4_empty; new = id3_ucs4_duplicate(string); if (new == 0) return -1; strings = realloc(field->stringlist.strings, (field->stringlist.nstrings + 1) * sizeof(*strings)); if (strings == 0) { free(new); return -1; } field->stringlist.strings = strings; field->stringlist.strings[field->stringlist.nstrings++] = new; return 0;}/* * NAME: field->setlanguage() * DESCRIPTION: set the value of a language field */int id3_field_setlanguage(union id3_field *field, char const *language){ assert(field); if (field->type != ID3_FIELD_TYPE_LANGUAGE) return -1; id3_field_finish(field); if (language) { if (strlen(language) != 3) return -1; strcpy(field->immediate.value, language); } return 0;}/* * NAME: field->setframeid() * DESCRIPTION: set the value of a frameid field */int id3_field_setframeid(union id3_field *field, char const *id){ assert(field); if (field->type != ID3_FIELD_TYPE_FRAMEID || !id3_frame_validid(id)) return -1; id3_field_finish(field); field->immediate.value[0] = id[0]; field->immediate.value[1] = id[1]; field->immediate.value[2] = id[2]; field->immediate.value[3] = id[3]; field->immediate.value[4] = 0; return 0;}/* * NAME: field->setbinarydata() * DESCRIPTION: set the value of a binarydata field */int id3_field_setbinarydata(union id3_field *field, id3_byte_t const *data, id3_length_t length){ id3_byte_t *mem; assert(field); if (field->type != ID3_FIELD_TYPE_BINARYDATA) return -1; id3_field_finish(field); if (length == 0) mem = 0; else { mem = malloc(length); if (mem == 0) return -1; assert(data); memcpy(mem, data, length); } field->binary.data = mem; field->binary.length = length; return 0;}/* * NAME: field->getint() * DESCRIPTION: return the value of an integer field */signed long id3_field_getint(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_INT8 && field->type != ID3_FIELD_TYPE_INT16 && field->type != ID3_FIELD_TYPE_INT24 && field->type != ID3_FIELD_TYPE_INT32) return -1; return field->number.value;}/* * NAME: field->gettextencoding() * DESCRIPTION: return the value of a text encoding field */enum id3_field_textencodingid3_field_gettextencoding(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_TEXTENCODING) return -1; return field->number.value;}/* * NAME: field->getlatin1() * DESCRIPTION: return the value of a latin1 field */id3_latin1_t const *id3_field_getlatin1(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_LATIN1) return 0; return field->latin1.ptr ? field->latin1.ptr : (id3_latin1_t const *) "";}/* * NAME: field->getfulllatin1() * DESCRIPTION: return the value of a full latin1 field */id3_latin1_t const *id3_field_getfulllatin1(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_LATIN1FULL) return 0; return field->latin1.ptr ? field->latin1.ptr : (id3_latin1_t const *) "";}/* * NAME: field->getstring() * DESCRIPTION: return the value of a string field */id3_ucs4_t const *id3_field_getstring(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_STRING) return 0; return field->string.ptr ? field->string.ptr : id3_ucs4_empty;}/* * NAME: field->getfullstring() * DESCRIPTION: return the value of a fullstring field */id3_ucs4_t const *id3_field_getfullstring(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_STRINGFULL) return 0; return field->string.ptr ? field->string.ptr : id3_ucs4_empty;}/* * NAME: field->getnstrings() * DESCRIPTION: return the number of strings in a stringlist field */unsigned int id3_field_getnstrings(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_STRINGLIST) return 0; return field->stringlist.nstrings;}/* * NAME: field->getstrings() * DESCRIPTION: return one value of a stringlist field */id3_ucs4_t const *id3_field_getstrings(union id3_field const *field, unsigned int index){ id3_ucs4_t const *string; assert(field); if (field->type != ID3_FIELD_TYPE_STRINGLIST || index >= field->stringlist.nstrings) return 0; string = field->stringlist.strings[index]; return string ? string : id3_ucs4_empty;}/* * NAME: field->getframeid() * DESCRIPTION: return the value of a frameid field */char const *id3_field_getframeid(union id3_field const *field){ assert(field); if (field->type != ID3_FIELD_TYPE_FRAMEID) return 0; return field->immediate.value;}/* * NAME: field->getbinarydata() * DESCRIPTION: return the value of a binarydata field */id3_byte_t const *id3_field_getbinarydata(union id3_field const *field, id3_length_t *length){ static id3_byte_t const empty; assert(field && length); if (field->type != ID3_FIELD_TYPE_BINARYDATA) return 0; assert(field->binary.length == 0 || field->binary.data); *length = field->binary.length; return field->binary.data ? field->binary.data : ∅}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -