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

📄 arj_user.c

📁 open arj source
💻 C
📖 第 1 页 / 共 5 页
字号:
  strcpy(nptr, name);  sflist[sflist_args++]=nptr; }}#endif#if SFX_LEVEL>=ARJ/* Checks if an archived file can be processed, returns 1 if yes. */static int processing_validation(){ int rc; int entry; if(filter_attrs) {  rc=0;  if(file_attr_mask&TAG_WINLFN&&(host_os==OS_WIN95||host_os==OS_WINNT)&&     (file_type==ARJT_DIR||file_type==ARJT_UXSPECIAL||file_type==ARJT_BINARY||file_type==ARJT_TEXT))   rc=1;  if(file_attr_mask&TAG_LABEL&&file_type==ARJT_LABEL)   rc=1;  if(file_attr_mask&TAG_CHAPTER&&file_type==ARJT_CHAPTER)   rc=1;  if(file_attr_mask&TAG_DIREC&&file_type==ARJT_DIR)   rc=1;  if(file_attr_mask&TAG_UXSPECIAL&&file_type==ARJT_UXSPECIAL)   rc=1;  if(file_attr_mask&TAG_NORMAL&&(file_type==ARJT_BINARY||file_type==ARJT_TEXT))  {   if(file_mode.dos&FATTR_DIREC!=FATTR_DIREC&&      file_mode.dos&FATTR_RDONLY!=FATTR_RDONLY&&      file_mode.dos&FATTR_SYSTEM!=FATTR_SYSTEM&&      file_mode.dos&FATTR_HIDDEN!=FATTR_HIDDEN&&      file_type!=ARJT_UXSPECIAL)    rc=1;  }  if(file_attr_mask&TAG_RDONLY&&file_mode.dos&FATTR_RDONLY)   rc=1;  if(file_attr_mask&TAG_HIDDEN&&file_mode.dos&FATTR_HIDDEN)   rc=1;  if(file_attr_mask&TAG_SYSTEM&&file_mode.dos&FATTR_SYSTEM)   rc=1;  if(file_attr_mask&TAG_ARCH&&(file_mode.dos&FATTR_ARCH!=FATTR_ARCH))   return(0);  if(file_attr_mask&TAG_NOT_ARCH&&file_mode.dos&FATTR_ARCH)   return(0);  if(!rc)   return(0); } if(ts_valid(tested_ftime_newer)&&(filter_same_or_newer==TCHECK_FTIME||filter_same_or_newer==TCHECK_NDAYS)) {  if(ts_cmp(&ftime_stamp, &tested_ftime_newer)<0)   return(0); } if(ts_valid(tested_ftime_older)&&(filter_older==TCHECK_FTIME||filter_older==TCHECK_NDAYS)) {  if(ts_cmp(&ftime_stamp, &tested_ftime_older)>=0)   return(0); } /* ctime */ if(ts_valid(tested_ftime_newer)&&filter_same_or_newer==TCHECK_CTIME) {  if(ts_cmp(&ctime_stamp, &tested_ftime_newer)<0)   return(0); } if(ts_valid(tested_ftime_older)&&filter_older==TCHECK_CTIME) {  if(ts_cmp(&ctime_stamp, &tested_ftime_older)>=0)   return(0); } /* atime */ if(ts_valid(tested_ftime_newer)&&filter_same_or_newer==TCHECK_ATIME) {  if(ts_cmp(&atime_stamp, &tested_ftime_newer)<0)   return(0); } if(ts_valid(tested_ftime_older)&&filter_older==TCHECK_ATIME) {  if(ts_cmp(&atime_stamp, &tested_ftime_older)>=0)   return(0); } entry=(add_command&&exclude_paths==EP_BASEDIR)?strlen(target_dir):0; return(!flist_find(&flist_exclusion, filename+entry));}/* Retrieves total statistics for the archive */static void get_totals(){ FILE_COUNT cur_file; if(add_command) {  total_size=0L;  total_written=0L;  display_totals=1;  for(cur_file=0; cur_file<flist_main.files; cur_file++)  {   flist_retrieve(filename, &properties, &flist_main, cur_file);   if(match_attrib(&properties))    total_size+=properties.fsize;  } }}/* Basic archive processing routine */static void process_archive(int cmd, int no_in_arch){ FILE_COUNT pf_num; FILE_COUNT cur_file; int val_result; int update_perm;                       /* Update permission */ int pack_rc; int sp_action; ts_store(&ftime_stamp, OS_SPECIAL, 0L); force_volume_flag=0; if(modify_command)  ext_hdr_capacity=LONG_MAX;            /* ASR fix 15/05/2003 */ while(!no_in_arch&&read_header(0, aistream, archive_name)) {  if(!modify_command&&exit_after_count&&total_processed+comment_entries+total_files-split_files>=exit_count)   break;  pf_num=flist_lookup(++cf_num);  val_result=processing_validation();  switch(cmd)  {   case ARJ_CMD_ADD:    if(pf_num!=0&&file_type!=ARJT_LABEL)    {     flist_retrieve(filename, &properties, &flist_main, pf_num-1);     update_perm=1;     if(serialize_exts)     {      msg_sprintf(misc_buf, M_QUERY_UPDATE, filename);      update_perm=query_action(REPLY_YES, QUERY_UPDATE, (FMSG *)misc_buf);     }     if(update_perm)     {      if(!new_files_only)      {       pack_rc=pack_file_stub(0, 1);       if(pack_rc!=0)       {        if(volume_flag_set)        {         vol_file_num=pf_num;         break;        }        if(pack_rc!=1)         break;        cfa_store(pf_num-1, FLFLAG_PROCESSED);        break;       }      }     }     cfa_store(pf_num-1, FLFLAG_SKIPPED);    }    special_processing(CFA_NONE, aistream);    break;   case ARJ_CMD_COMMENT:    if(pf_num&&val_result&&(!use_comment||supply_comment_file)&&!(arj_flags&EXTFILE_FLAG))    {     update_perm=1;     if(query_for_each_file)     {      msg_sprintf(misc_buf, M_QUERY_COMMENT, filename);      update_perm=query_action(REPLY_YES, QUERY_ARCH_OP, (FMSG *)misc_buf);     }     if(update_perm)     {      if(supply_comment(comment_file, filename))       comment_entries++;     }    }    special_processing(CFA_NONE, aistream);    break;   case ARJ_CMD_DELETE:    if(pf_num&&val_result)    {     if(arcv_delete(cf_num))      break;    }    special_processing(CFA_NONE, aistream);    break;   case ARJ_CMD_FRESHEN:   case ARJ_CMD_UPDATE:    if(pf_num&&file_type!=ARJT_LABEL)    {     flist_retrieve(filename, &properties, &flist_main, pf_num-1);     pack_rc=pack_file_stub(1, 1);     if(pack_rc!=0)     {      if(vol_file_num==pf_num)      {       if(volume_flag_set)        break;       if(pack_rc==1)        cfa_store(vol_file_num-1, FLFLAG_PROCESSED);       vol_file_num=0;       break;      }      if(volume_flag_set)       vol_file_num=pf_num;      else if(pack_rc==1)       cfa_store(pf_num-1, FLFLAG_PROCESSED);      break;     }     special_processing(CFA_NONE, aistream);     cfa_store(pf_num-1, FLFLAG_SKIPPED);     break;    }    special_processing(CFA_NONE, aistream);    break;   case ARJ_CMD_GARBLE:    sp_action=CFA_NONE;    if(pf_num!=0&&val_result)    {     update_perm=1;     if(query_for_each_file)     {      msg_sprintf(misc_buf, M_QUERY_GARBLE, filename);      update_perm=query_action(REPLY_YES, QUERY_ARCH_OP, (FMSG *)misc_buf);     }     if(update_perm)      sp_action=CFA_GARBLE;    }    special_processing(sp_action, aistream);    break;   case ARJ_CMD_RENAME:    if(pf_num!=0&&val_result)    {     if(rename_file())      total_files++;    }    special_processing(CFA_NONE, aistream);    break;   case ARJ_CMD_ORDER:    if(arj_flags&VOLUME_FLAG||arj_flags&EXTFILE_FLAG)     error(M_CANT_ORDER_MV);    if(order_fcount>=order_fcap)    {     if(order_fcap==0)      order_fcap=flist_main.files;     order_fcap+=FILELIST_INCREMENT;     if((order_list=(unsigned long FAR *)farrealloc(order_list, order_fcap*sizeof(unsigned long)))==NULL)      error(M_OUT_OF_MEMORY);    }    if(pf_num!=0)    {     arch_hdr_index[pf_num-1]=cur_header_pos;     cfa_store(pf_num-1, FLFLAG_PROCESSED);     order_list[order_fcount++]=0L;    }    else     order_list[order_fcount++]=cur_header_pos;    total_files++;    skip_compdata();    break;   case ARJ_CMD_REMPATH:    sp_action=CFA_NONE;    if(pf_num!=0&&val_result)    {     update_perm=1;     if(query_for_each_file)     {      msg_sprintf(misc_buf, M_QUERY_GARBLE, filename);      update_perm=query_action(REPLY_YES, QUERY_ARCH_OP, (FMSG *)misc_buf);     }     if(update_perm)      sp_action=CFA_REMPATH;    }    special_processing(sp_action, aistream);    break;   case ARJ_CMD_JOIN:   case ARJ_CMD_SECURE:    special_processing(CFA_NONE, aistream);    total_files++;    break;   case ARJ_CMD_COPY:    sp_action=CFA_NONE;    if(pf_num!=0&&val_result)    {     if(chapter_mode==CHAP_USE)      sp_action=CFA_MARK_EXT;     else if(chapter_mode==CHAP_REMOVE)      sp_action=CFA_UNMARK_EXT;     else if(garble_enabled)      sp_action=CFA_UNGARBLE;    }    special_processing(sp_action, aistream);    break;   case ARJ_CMD_EXTR_NP:   case ARJ_CMD_PRINT:    if(pf_num!=0&&val_result)    {     update_perm=1;     if(query_for_each_file)     {      if(!first_vol_passed||!continued_prevvolume)      {       msg_sprintf(misc_buf, M_QUERY_EXTRACT, filename);       update_perm=query_action(REPLY_YES, QUERY_ARCH_OP, (FMSG *)misc_buf);      }      else      {       if(ofstream==NULL)        update_perm=0;      }     }     if(update_perm)     {      if(unpack_file_proc(cmd==ARJ_CMD_PRINT, cf_num))      {       total_files++;       if(volume_flag_set)        split_files++;      }      tmp_tmp_filename[0]='\0';     }     else      skip_compdata();    }    else     skip_compdata();    break;   case ARJ_CMD_LIST:    if(pf_num!=0&&val_result)    {     if(list_cmd(total_files, cf_num))      total_files++;    }    skip_compdata();    break;   case ARJ_CMD_TEST:    if(pf_num!=0&&val_result)    {     if(test_archive_crc==TC_CRC_AND_CONTENTS)      add_base_dir(filename);     if(unpack_validation(cmd))      total_files++;    }    else     skip_compdata();    break;   case ARJ_CMD_WHERE:    if(pf_num!=0&&val_result)    {     if(unpack_validation(cmd))      total_files++;    }    else     skip_compdata();    break;  } } if((cmd==ARJ_CMD_ADD||cmd==ARJ_CMD_UPDATE)&&multivolume_option&&continued_nextvolume&&!no_inarch)  volume_flag_set=1; if(multivolume_option&&add_command)  continued_nextvolume=1; ext_voldata=0; /* ASR fix for v 2.76.04 - prevent phantom EAs at archive joints */ if(!continued_nextvolume) {  if(eh!=NULL)  {   eh_release(eh);   eh=NULL;  } } if(cmd==ARJ_CMD_ADD||cmd==ARJ_CMD_UPDATE) {  if(cf_num!=0)  {   resume_position=0L;   continued_prevvolume=0;  }  if(multivolume_option&&check_multivolume(MULTIVOLUME_INCREMENT)<MULTIVOLUME_INCREMENT)   volume_flag_set=1;  if(!volume_flag_set&&vol_file_num!=0)  {   flist_retrieve(filename, &properties, &flist_main, vol_file_num-1);   if(pack_file_stub(0, 0)&&!volume_flag_set)   {    cfa_store(vol_file_num-1, FLFLAG_PROCESSED);    vol_file_num=0;   }  }  for(cur_file=0; !volume_flag_set&&cur_file<flist_main.files; cur_file++)  {   if(cfa_get(cur_file)==FLFLAG_TO_PROCESS)   {    flist_retrieve(filename, &properties, &flist_main, cur_file);    if(pack_file_stub(0, 0))    {     if(volume_flag_set)      vol_file_num=cur_file+1;     else      cfa_store(cur_file, FLFLAG_PROCESSED);    }    else     cfa_store(cur_file, FLFLAG_SKIPPED);    if(multivolume_option&&check_multivolume(MULTIVOLUME_INCREMENT)<MULTIVOLUME_INCREMENT&&(cur_file+1)<flist_main.files)     volume_flag_set=1;   }  }  if(multivolume_option&&check_multivolume(MULTIVOLUME_INCREMENT)<MULTIVOLUME_INCREMENT&&cur_file<flist_main.files)   volume_flag_set=1;#ifdef HAVE_VOL_LABELS  if(handle_labels&&!volume_flag_set)   store_label();#endif  if(multivolume_option&&check_multivolume(MULTIVOLUME_INCREMENT)<MULTIVOLUME_INCREMENT&&cur_file<flist_main.files)   volume_flag_set=1;  if(total_chapters!=0&&!volume_flag_set&&current_chapter<=CHAPTERS_MAX&&total_chapters>recent_chapter)   create_chapter_mark(); } else if(cmd==ARJ_CMD_JOIN)  total_files+=copy_archive(); else if(cmd==ARJ_CMD_ORDER) {  pf_num=0;  for(cur_file=0; cur_file<flist_main.files; cur_file++)  {   /* has been previously selected? Otherwise its "default" value is FLFLAG_TO_PROCESS :-o */      if(cfa_get(cur_file)==FLFLAG_PROCESSED)   {    fseek(aistream, arch_hdr_index[cur_file], SEEK_SET);    read_header(0, aistream, archive_name);    special_processing(CFA_NONE, aistream);    pf_num++;   }  }  for(cur_file=0; cur_file<order_fcount; cur_file++)  {   if(order_list[cur_file]>0L)   {    fseek(aistream, order_list[cur_file], SEEK_SET);    read_header(0, aistream, archive_name);    special_processing(CFA_NONE, aistream);    pf_num++;   }  }  if(total_files!=pf_num)   error(M_ORDER_CNT_MISMATCH);  msg_cprintf(0, M_FILES_REORDERED); } if(cmd==ARJ_CMD_COPY&&total_chapters!=0&&!volume_flag_set&&total_files!=0&&total_chapters>recent_chapter)  create_chapter_mark();}/* Some post-processing actions */static void finish_processing(int cmd){ int skip_query; unsigned long cur_pos, eof_pos; int entry; char *ext_ptr; char *bak_name; FILE_COUNT cur_file; int vol_code; char *msg_ptr; int ratio; unsigned long free_space; int protected=0; int is_prot; if(modify_command) {  if(cmd==ARJ_CMD_DELETE&&total_files!=0&&file_args==1&&!strcmp_os(f_arg_array[0], all_wildcard))  {   skip_query=yes_on_all_queries||query_delete;   if(!skip_query)   {    msg_sprintf(misc_buf, M_QUERY_DELETE_N_FILES, total_files);    if(!query_action(REPLY_YES, QUERY_DELETE_N_FILES, (FMSG *)misc_buf))    {     errors++;     tmp_archive_cleanup();     longjmp(main_proc, 1);    }   }

⌨️ 快捷键说明

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