⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 field.c

📁 linux下mp3编解码程序
💻 C
📖 第 1 页 / 共 2 页
字号:
 */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 : &empty;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -