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

📄 rearj.c

📁 open arj source
💻 C
📖 第 1 页 / 共 3 页
字号:
 #endif if(truename(full_name, name)) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_CANT_FIND, name);  return(REARJ_ERL_WARNING); } entry=split_name(full_name, NULL, filespec); #if TARGET==UNIX  fspec_len=strlen(filespec); #endif dot_pos=strrchr(filespec, '.'); if(dot_pos==NULL) {  #if TARGET!=UNIX   extension[0]='\0';  #endif  strcpy(target_name, full_name);  strcat(target_name, dot);  strcat(target_name, archivers[target_type].suffix);  strcpy(bak_name, full_name); } else {  #if TARGET!=UNIX   *dot_pos++='\0';   strcpy(extension, dot_pos);  #endif  strncpy(target_name, full_name, entry);  target_name[entry]='\0';  strcpy(bak_name, target_name);  #if TARGET!=UNIX   strcat(target_name, filespec);   strcat(target_name, dot);   strcat(target_name, archivers[target_type].suffix);  #endif  strcat(bak_name, filespec); } strcat(bak_name, dot); strcat(bak_name, backup_extension); strcpy(cnv_name, work_dir); strcat(cnv_name, pathsep_str); strcat(cnv_name, filespec); strcat(cnv_name, dot); strcat(cnv_name, archivers[target_type].suffix); repack=!strcmp_os(target_name, full_name); tmp_name=cnv_diskette_archives?cnv_name:target_name; src_type=-1; for(i=0; i<total_suffixes; i++) {  #if TARGET==UNIX   match=0;   if(dot_pos==NULL)   {    if(archivers[i].suffix[0]=='\0')     match=1;   }   else   {    pattern_len=strlen(archivers[i].suffix);    if(fspec_len>pattern_len&&       filespec[fspec_len-pattern_len-1]=='.'&&       !strcmp_os(filespec+fspec_len-pattern_len, archivers[i].suffix))    {     match=1;     strcat(target_name, filespec);     target_name[strlen(target_name)-pattern_len]='\0';     strcat(target_name, archivers[target_type].suffix);    }   }   if(match)    src_type=i;  #else   if(!strcmp_os(extension, archivers[i].suffix))    src_type=i;  #endif } if(src_type==-1)  src_type=default_suffix; if(src_type==-1) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_UNKNOWN_TYPE, full_name);  return(REARJ_ERL_UNCONFIGURED); } old_fsize=file_getfsize(full_name); if((!overwrite_existing&&!repack&&file_exists(target_name))||    (cnv_diskette_archives&&!overwrite_existing&&file_exists(cnv_name))) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_TGT_EXISTS, full_name);  return(REARJ_ERL_TGT_EXISTS); } if(!update_with_backups&&repack) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_REPACK, full_name);  return(REARJ_ERL_UPD_SKIPPED); } msg_cprintf(H_HL|H_NFMT, M_CONVERTING_ARCHIVE, full_name, archivers[src_type].suffix, archivers[target_type].suffix); if(conversion_query) {  msg_cprintf(0, M_QUERY_CONVERT);  if(!query_action())  {   msg_cprintf(H_HL|H_NFMT, M_SKIPPING, full_name);   return(REARJ_ERL_UPD_SKIPPED);  } } if(overwrite_existing&&!repack&&file_exists(target_name)&&!no_file_activity)  if(file_unlink(target_name))   error(M_CANT_UNLINK, target_name); if(cnv_diskette_archives&&overwrite_existing&&file_exists(cnv_name)&&!no_file_activity)  if(file_unlink(cnv_name))   error(M_CANT_UNLINK, cnv_name); ts_store(&old_ftime, OS, file_getftime(full_name)); unlink_all(tmp_dir); if(file_chdir(tmp_dir))  error(M_CANT_CHDIR, tmp_dir); if(run_preunpack_cmd) {  sprintf(cmd_buffer, "%s %s", preunpack_cmd_text, full_name);  msg_cprintf(H_HL|H_NFMT, M_EXECUTING_PRE, cmd_buffer);  exec_cmd(cmd_buffer); } sprintf(cmd_buffer, archivers[src_type].unpack_cmd, full_name); msg_cprintf(H_HL|H_NFMT, M_EXECUTING, cmd_buffer); exec_rc=exec_exe(cmd_buffer); if(exec_rc!=0) {  if(exec_rc==-1)   msg_cprintf(H_HL|H_NFMT, M_SKIP_EXE_MISSING, full_name);  else   msg_cprintf(H_HL|H_NFMT, M_SKIP_UNPACK_ERR, full_name, exec_rc);  return(REARJ_ERL_UNPACK); } if(!archivers[target_type].subdirs_supported&&check_for_dirs()) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_UNSUPP_DIR, full_name);  return(REARJ_ERL_DIRECTORIES); } if(!check_for_entries()) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_NO_FILES, full_name);  return(REARJ_ERL_UNPACK); } if(run_precount_cmd) {  sprintf(cmd_buffer, "%s %s", precount_cmd_text, full_name);  msg_cprintf(H_HL|H_NFMT, M_EXECUTING_CNT, cmd_buffer);  exec_cmd(cmd_buffer); } if(!skip_size_check)  old_count=count_files(); if(run_extract_cmd) {  msg_cprintf(H_HL|H_NFMT, M_EXECUTING_EXTR, extract_cmd_text);  exec_rc=exec_exe(extract_cmd_text);  if(exec_rc!=0)  {   if(exec_rc==-1)    msg_cprintf(H_HL|H_NFMT, M_SKIP_V_EXE_MISSING, full_name);   else    msg_cprintf(H_HL|H_NFMT, M_SKIP_V_ERR, full_name, exec_rc);   return(REARJ_ERL_VIRUS);  } } if(convert_nested_archives) {  nst_suf_wildcard=(acc_nested_suffixes!=NULL)?acc_nested_suffixes:archivers[src_type].suffix;  /* ASR FIX 30/12/1999: only 6 additional (%s) params in original REARJ v 2.42 */  sprintf(cmd_buffer,          "%s *.%s " REARJ_SWITCHAR "t%s " REARJ_SWITCHAR "d " REARJ_SWITCHAR "r " REARJ_SWITCHAR "a%s " REARJ_SWITCHAR "e%s%s%s%s%s%s%s",          exe_name,          nst_suf_wildcard,          archivers[target_type].suffix,          nst_suf_wildcard,          skip_size_check?" " REARJ_SWITCHAR "s":nullstr,          no_file_activity?" " REARJ_SWITCHAR "z":nullstr,          update_with_backups?" " REARJ_SWITCHAR "u":nullstr,          overwrite_existing?" " REARJ_SWITCHAR "o":nullstr,          run_extract_cmd?" " REARJ_SWITCHAR "v":nullstr,          skip_rearj_sw?" " REARJ_SWITCHAR "+":nullstr,          skip_packing?" " REARJ_SWITCHAR "g":nullstr);  msg_cprintf(H_HL|H_NFMT, M_EXECUTING, cmd_buffer);  exec_rc=exec_exe(cmd_buffer);  if(exec_rc!=0)  {   if(exec_rc==-1)    msg_cprintf(H_HL|H_NFMT, M_SKIP_REARJ_MISSING, full_name);   else    msg_cprintf(H_HL|H_NFMT, M_SKIP_REARJ_FAILED, full_name, exec_rc);   return(REARJ_ERL_INTERNAL);  } } if(skip_packing) {  if(logging_enabled)  {   arj_gettime(&log_ts);   if(fprintf(logstream, M_LOGENTRY_CONV, timeseq, archivers[target_type].suffix, old_fsize, 0L, 0L, full_name)<=0)    error(M_CANT_WRITE_LOG);  }  return(0); } if(!skip_size_check)  old_size=count_total_size(); if(!archivers[target_type].hidden_supported)  reset_attrs(); if(update_with_backups&&repack) {  if(file_exists(bak_name)&&!no_file_activity)   if(file_unlink(bak_name))    error(M_CANT_UNLINK, bak_name);  if(!no_file_activity)   if(rename_with_check(full_name, bak_name))   {    msg_cprintf(H_HL|H_NFMT, M_SKIP_CANT_RENAME, full_name, bak_name);    return(REARJ_ERL_RENAME);   }  if(!no_file_activity)   msg_cprintf(H_HL|H_NFMT, M_BACKED_UP, full_name, bak_name); } sprintf(cmd_buffer, archivers[target_type].pack_cmd, tmp_name); msg_cprintf(H_HL|H_NFMT, M_EXECUTING, cmd_buffer); exec_rc=exec_exe(cmd_buffer); if(exec_rc!=0) {  if(update_with_backups&&repack)  {   if(file_exists(full_name)&&!no_file_activity)    if(file_unlink(full_name))     error(M_CANT_UNLINK, full_name);   if(!no_file_activity)    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);  }  if(exec_rc==-1)   msg_cprintf(H_HL|H_NFMT, M_SKIP_P_EXE_MISSING, full_name);  else  {   /* ASR fix for 2.42.05 -- unlink empty .tar.gz archives */   if(archivers[target_type].manual_deletion)    unlink(tmp_name);   msg_cprintf(H_HL|H_NFMT, M_SKIP_PACK_ERR, full_name, exec_rc);  }  return(REARJ_ERL_PACK); } if(file_chdir(work_dir))  error(M_CANT_CHDIR, work_dir); if(!file_exists(tmp_name)) {  if(update_with_backups&&repack)  {   if(file_exists(full_name)&&!no_file_activity)    if(file_unlink(full_name))     error(M_CANT_UNLINK, full_name);   if(!no_file_activity)    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);  }  msg_cprintf(H_HL|H_NFMT, M_SKIP_NOT_PACKED, full_name);  return(REARJ_ERL_PACK); } new_fsize=file_getfsize(tmp_name); if(skip_larger_output&&old_fsize<new_fsize) {  msg_cprintf(H_HL|H_NFMT, M_SKIP_LARGER, full_name);  if(!no_file_activity)   if(file_unlink(tmp_name))    error(M_CANT_UNLINK, tmp_name);  if(update_with_backups||!repack||no_file_activity)   return(REARJ_ERL_OVERGROW);  else  {   if(rename_with_check(bak_name, full_name))    return(REARJ_ERL_OVERGROW);   else    error(M_CANTRENAME, bak_name, full_name);  } } if(!skip_size_check) {  msg_cprintf(H_HL|H_NFMT, M_VERIFYING_SIZE, old_count, old_size);  unlink_all(tmp_dir);  if(file_chdir(tmp_dir))   error(M_CANT_CHDIR, tmp_dir);  sprintf(cmd_buffer, archivers[target_type].unpack_cmd, tmp_name);  msg_cprintf(H_HL|H_NFMT, M_EXECUTING, cmd_buffer);  exec_exe(cmd_buffer);  new_count=count_files();  new_size=count_total_size();  msg_cprintf(H_HL|H_NFMT, M_FOUND_SIZE, new_count, new_size);  if(old_count!=new_count)  {   msg_cprintf(H_HL|H_NFMT, M_SKIP_COUNT_MISMATCH, full_name);   if(!no_file_activity)    if(file_unlink(tmp_name))     error(M_CANT_UNLINK, tmp_name);   if(update_with_backups&&repack&&!no_file_activity)    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);   return(REARJ_ERL_COUNT);  }  if(old_size!=new_size)  {   msg_cprintf(H_HL|H_NFMT, M_SKIP_SIZE_MISMATCH, full_name);   if(!no_file_activity)    if(file_unlink(tmp_name))     error(M_CANT_UNLINK, tmp_name);   if(update_with_backups&&repack&&!no_file_activity)    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);   return(REARJ_ERL_SIZE);  }  msg_cprintf(H_HL, M_SIZE_VERIFIED);  if(file_chdir(work_dir))   error(M_CANT_CHDIR, work_dir); } if(cnv_diskette_archives) {  if(file_getfree(full_name)+old_fsize<new_fsize)  {   msg_cprintf(H_HL|H_NFMT, M_SKIP_DISK_FULL, full_name);   if(!no_file_activity)    if(file_unlink(tmp_name))     error(M_CANT_UNLINK, tmp_name);   if(update_with_backups&&repack&&!no_file_activity)    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);   return(REARJ_ERL_DISK_FULL);  } } if(delete_original_archives) {  if(!repack)  {   msg_cprintf(H_HL|H_NFMT, M_DELETING_2, full_name);   if(!no_file_activity)    if(file_unlink(full_name))     error(M_CANT_UNLINK, full_name);  }  else if(cnv_diskette_archives&&update_with_backups)  {   msg_cprintf(H_HL|H_NFMT, M_DELETING_2, bak_name);   if(!no_file_activity)    if(file_unlink(bak_name))     error(M_CANT_UNLINK, bak_name);  } } if(cnv_diskette_archives) {  if(!no_file_activity)  {   if(file_copy_v(cnv_name, target_name))    error(M_CANT_COPY, cnv_name, target_name);  }  if(!no_file_activity)   if(file_unlink(cnv_name))    error(M_CANT_UNLINK, cnv_name); } if(delete_original_archives&&!cnv_diskette_archives&&update_with_backups&&repack) {  msg_cprintf(H_HL|H_NFMT, M_DELETING_2, bak_name);  if(!no_file_activity)   if(file_unlink(bak_name))    error(M_CANT_UNLINK, bak_name); } if(!skip_timestamping)  file_setftime(target_name, ts_native(&old_ftime, OS)); if(testing_mode&&!delete_original_archives) {  if(update_with_backups&&repack)  {   if(file_exists(full_name))    if(file_unlink(full_name))     error(M_CANT_UNLINK, full_name);   msg_cprintf(H_HL|H_NFMT, M_RENAMING, bak_name, full_name);   if(!no_file_activity)   {    if(rename_with_check(bak_name, full_name))     error(M_CANTRENAME, bak_name, full_name);   }  }  else if(!repack)  {   msg_cprintf(H_HL|H_NFMT, M_DELETING_2, target_name);   if(!no_file_activity)    if(file_unlink(target_name))     error(M_CANT_UNLINK, target_name);  } } gain=(long)(old_fsize-new_fsize); msg_cprintf(H_HL|H_NFMT, M_OLD_SIZE, old_fsize); msg_cprintf(H_HL|H_NFMT, M_NEW_SIZE, new_fsize); msg_cprintf(H_HL|H_NFMT, M_SAVINGS_SIZE, gain); printf(lf); total_old_fsize+=old_fsize; total_new_fsize+=new_fsize; total_files++; if(logging_enabled) {  arj_gettime(&log_ts);  if(fprintf(logstream, M_LOGENTRY_CONV, timeseq, archivers[target_type].suffix, old_fsize, new_fsize, gain, full_name)<=0)   error(M_CANT_WRITE_LOG); } return(0);}/* Adds a new file to the exclusion filelist */static void submit_exclusion(char *name){ char tmp_name[CCHMAXPATH]; FILE *stream; if(name[0]=='!') {  name++;  if(name[0]=='\0')   error(M_LISTFILE_MISSING);  if((stream=file_open(name, m_r))==NULL)   error(M_CANTOPEN, stream);  while(fgets(tmp_name, sizeof(tmp_name), stream)!=NULL)  {   tokenize_lf(tmp_name);   alltrim(tmp_name);   if(tmp_name[0]!='\0')   {    if(wild_list(&flist_exclusion, tmp_name, 0, 0, 0, NULL))     break;   }  }  fclose(stream); } else  wild_list(&flist_exclusion, name, 0, 0, 0, NULL);}/* Sets up REARJ */static void analyze_rearj_sw(char *arg){ char sw; char *swptr; swptr=arg+1; sw=toupper(*swptr); swptr++; if(sw=='D'&&*swptr=='\0')  delete_original_archives=1; else if(sw=='E'&&*swptr=='\0')  internal_archives_only=1; else if(sw=='F'&&*swptr=='\0')  cnv_diskette_archives=1; else if(sw=='H'&&*swptr=='\0')  help_issued=1; else if(sw=='O'&&*swptr=='\0')  overwrite_existing=1; else if(sw=='P'&&*swptr=='\0')  skip_lfn=1; else if(sw=='Q'&&*swptr=='\0')  conversion_query=1; else if(sw=='R'&&*swptr=='\0')  recurse_subdirs=1; else if(sw=='S'&&*swptr=='\0')  skip_size_check=1; else if(sw=='V'&&*swptr=='\0')  run_extract_cmd=1; else if(sw=='Z'&&*swptr=='\0')  no_file_activity=1; else if(sw=='A') {  if(*swptr!='\0')  {   case_path(swptr);   acc_nested_suffixes=swptr;  }  convert_nested_archives=1; } else if(sw=='B'&&*swptr!='\0') {  run_preunpack_cmd=1;  preunpack_cmd_text=swptr; } else if(sw=='C'&&*swptr!='\0') {  run_precount_cmd=1;  precount_cmd_text=swptr; } else if(sw=='I') {  if(*swptr!='\0')  {   case_path(swptr);   exe_name=swptr;  }  chk_integrity=1; } else if(sw=='F'&&*swptr!='\0') {  default_suffix=-1;  case_path(swptr);  suffix_override=swptr; } else if(sw=='L') {  if(*swptr!='\0')  {   case_path(swptr);   log_name=swptr;  }  logging_enabled=1; } else if(sw=='T'&&*swptr!='\0') {  target_type=-1;  case_path(swptr);  target_suffix=swptr; } else if(sw=='U') {  if(*swptr!='\0')  {   case_path(swptr);   backup_extension=swptr;  }  update_with_backups=1; } else if(sw=='W'&&*swptr!='\0') {  case_path(swptr);  tmp_dir=swptr;  work_directory_assigned=1; } else if(sw=='X'&&*swptr!='\0')  submit_exclusion(swptr); else if(sw=='G'&&*swptr=='\0')  skip_packing=1; else if(sw=='J'&&*swptr=='\0')  skip_larger_output=1; else if(sw=='K'&&*swptr=='\0')  skip_timestamping=1;

⌨️ 快捷键说明

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