/* Get filename length */
name_len = cpio_name_len ( image, depth );
- /* Calculate mode and length */
- if ( depth < max ) {
- /* Directory */
+ /* Set directory mode or file mode as appropriate */
+ if ( name[name_len] == '/' ) {
mode = ( CPIO_MODE_DIR | CPIO_DEFAULT_DIR_MODE );
- len = 0;
} else {
- /* File */
mode |= CPIO_MODE_FILE;
- len = image->len;
}
+ /* Set length on final header */
+ len = ( ( depth < max ) ? 0 : image->len );
+
/* Construct CPIO header */
memset ( cpio, '0', sizeof ( *cpio ) );
memcpy ( cpio->c_magic, CPIO_MAGIC, sizeof ( cpio->c_magic ) );
CPIO_HEADER ( "000081a4", "00000341", "0000001a",
"/usr/share/oem/config.ign" PAD1 ) );
+/* Simple directory */
+CPIO_TEST ( dir, 0, "/opt/", 1,
+ CPIO_HEADER ( "000041ed", "00000000", "00000005",
+ "/opt" PAD2 ) );
+
+/* Directory tree */
+CPIO_TEST ( tree, 0, "/opt/oem/scripts/ mkdir=-1", 3,
+ CPIO_HEADER ( "000041ed", "00000000", "00000005",
+ "/opt" PAD2 )
+ CPIO_HEADER ( "000041ed", "00000000", "00000009",
+ "/opt/oem" PAD2 )
+ CPIO_HEADER ( "000041ed", "00000000", "00000011",
+ "/opt/oem/scripts" PAD2 ) );
+
/* Custom mode */
CPIO_TEST ( mode, 39, "/sbin/init mode=755", 1,
CPIO_HEADER ( "000081ed", "00000027", "0000000b",
cpio_ok ( &path_mkdir_1 );
cpio_ok ( &path_mkdir_2 );
cpio_ok ( &path_mkdir_all );
+ cpio_ok ( &dir );
+ cpio_ok ( &tree );
cpio_ok ( &mode );
cpio_ok ( &chaos );
}