Browse Source

Implemented ECMA constraints on PVD

master
Mario Danic 15 years ago
parent
commit
0281fcb717
  1. 18
      libisofs/ecma119.c
  2. 38
      libisofs/util.c
  3. 3
      libisofs/util.h

18
libisofs/ecma119.c

@ -438,16 +438,16 @@ write_pri_vol_desc(struct ecma119_write_target *t, uint8_t *buf)
{
struct ecma119_pri_vol_desc *vol = (struct ecma119_pri_vol_desc*)buf;
struct iso_volume *volume = t->volset->volume[t->volnum];
char *vol_id = str2ascii(volume->volume_id);
char *pub_id = str2ascii(volume->publisher_id);
char *data_id = str2ascii(volume->data_preparer_id);
char *volset_id = str2ascii(t->volset->volset_id);
char *vol_id = str2d_char(volume->volume_id);
char *pub_id = str2a_char(volume->publisher_id);
char *data_id = str2a_char(volume->data_preparer_id);
char *volset_id = str2d_char(t->volset->volset_id);
char *system_id = str2ascii(volume->system_id);
char *application_id = str2ascii(volume->application_id);
char *copyright_file_id = str2ascii(volume->copyright_file_id);
char *abstract_file_id = str2ascii(volume->abstract_file_id);
char *biblio_file_id = str2ascii(volume->biblio_file_id);
char *system_id = str2a_char(volume->system_id);
char *application_id = str2a_char(volume->application_id);
char *copyright_file_id = str2d_char(volume->copyright_file_id);
char *abstract_file_id = str2d_char(volume->abstract_file_id);
char *biblio_file_id = str2d_char(volume->biblio_file_id);
vol->vol_desc_type[0] = 1;
memcpy(vol->std_identifier, "CD001", 5);

38
libisofs/util.c

@ -78,7 +78,6 @@ static wchar_t *str2wchar(const char *str, const char *codeset)
}
iconv_close(conv);
//TODO is needed this??
*( (wchar_t *)ret )='\0';
return wstr;
}
@ -250,7 +249,6 @@ uint16_t *str2ucs(const char *src_arg)
return (uint16_t*)ret_;
}
static int valid_d_char(char c)
{
return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'Z') || (c == '_');
@ -278,6 +276,42 @@ static int valid_p_char(char c)
|| (c == '.') || (c == '_') || (c == '-');
}
char *str2d_char(const char *str) {
char *ret;
size_t len, i;
if (!str)
return NULL;
ret = str2ascii(str);
len = strlen(ret);
for (i = 0; i < len; ++i) {
char c = toupper(ret[i]);
ret[i] = valid_d_char(c) ? c : '_';
}
return ret;
}
char *str2a_char(const char *str) {
char *ret;
size_t len, i;
if (!str)
return NULL;
ret = str2ascii(str);
len = strlen(ret);
for (i = 0; i < len; ++i) {
char c = toupper(ret[i]);
ret[i] = valid_a_char(c) ? c : '_';
}
return ret;
}
static char *iso_dirid(const char *src, int size)
{
char *ret = str2ascii(src);

3
libisofs/util.h

@ -34,6 +34,9 @@ wchar_t *towcs(const char *);
char *str2ascii(const char*);
uint16_t *str2ucs(const char*);
char *str2d_char(const char*);
char *str2a_char(const char*);
/**
* Create a level 1 directory identifier.
*/

Loading…
Cancel
Save