+ }
+ break;
+ case S_IFLNK:
+ if (symlink(file_entry->link_name, full_name) < 0) {
+ if ((function & extract_quiet) != extract_quiet) {
+ *err = -1;
+ perror_msg
+ ("Cannot create symlink from %s to '%s'",
+ file_entry->name,
+ file_entry->link_name);
+ }
+ goto cleanup;
+ }
+ break;
+ case S_IFSOCK:
+ case S_IFBLK:
+ case S_IFCHR:
+ case S_IFIFO:
+ if (mknod
+ (full_name, file_entry->mode,
+ file_entry->device) == -1) {
+ if ((function & extract_quiet) != extract_quiet) {
+ *err = -1;
+ perror_msg("Cannot create node %s",
+ file_entry->name);
+ }
+ goto cleanup;
+ }
+ break;
+ default:
+ *err = -1;
+ perror_msg("Don't know how to handle %s", full_name);