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

📄 arj.c

📁 open arj source
💻 C
📖 第 1 页 / 共 3 页
字号:
    sprintf(archive_name, "%s/.%s", getenv("HOME"), misc_buf);    if(!file_exists(archive_name))     sprintf(archive_name, "/etc/%s", misc_buf);    if(file_exists(archive_name))     parse_arj_sw(cmd, archive_name, header);   #endif   archive_name[0]='\0';                /* ASR fix */  } } if(install_errhdl)  ignore_errors=1; if(force_lfn)  lfn_supported=LFN_SUPPORTED; if(use_ansi_cp==ANSICP_CONVERT)  ansi_cpf=1; set_file_apis(use_ansi_cp); #ifndef NO_FATAL_ERROR_HDL  if(win32_platform)   install_smart_handler(); #endif if(lfn_mode==LFN_NONE||lfn_mode==LFN_IGNORE)  lfn_supported=LFN_NOT_SUPPORTED; if(lfn_supported!=LFN_NOT_SUPPORTED&&lfn_mode==LFN_DUAL)  lfn_supported=LFN_COMP; is_registered=!is_registered; if(!is_registered&&regdata[REG_NAME_SHIFT]!='\0')  wait_error(M_CRC_ERROR); cmd=0; if(rsp_name[0]=='\0') {  for(cur_arg=1; cur_arg<argc; cur_arg++)   cmd=parse_cmdline(argv[cur_arg], cmd); } else {  stream=file_open_noarch(rsp_name, m_r);  while(fgets(header, FILENAME_MAX, stream)!=NULL)  {   tmp_ptr=malloc_str(header);   got_str=1;   for(tptr=tmp_ptr; *tptr!='\0'; tptr++)   {    if(rsp_per_line)    {     if(*tptr==LF)      *tptr='\0';    }    else if(*tptr==LF||*tptr==' ')     *tptr='\0';   }   endptr=tptr;   tptr=tmp_ptr;   while((endptr-tptr)>0)   {    /* ASR fix: check for overrun -- 25/08/2001 */    while(*tptr=='\0'&&((endptr-tptr)>0))     tptr++;    if((endptr-tptr)>0)    {     cmd=parse_cmdline(tptr, cmd);     while(*tptr!='\0'&&((endptr-tptr)>0))      tptr++;    }   }  }  fclose(stream);  if(!got_str)   error(M_CANTREAD); } if(install_errhdl)  ignore_errors=1; if(force_lfn)  lfn_supported=LFN_SUPPORTED; set_file_apis(use_ansi_cp); #ifndef NO_FATAL_ERROR_HDL  if(win32_platform)   install_smart_handler(); #endif if(file_args>=0) {  case_path(archive_name);  finish_archive_name(archive_name); } for(j=0; j<file_args; j++) {  tptr=f_arg_array[j];  if(strcmp_os(tptr, nonexist_name))  {   if(is_directory(tptr))    tptr=malloc_subdir_wc(tptr);   f_arg_array[j]=tptr;  } } if(lfn_mode==LFN_NONE||lfn_mode==LFN_IGNORE)  lfn_supported=LFN_NOT_SUPPORTED; if(lfn_supported!=LFN_NOT_SUPPORTED&&lfn_mode==LFN_DUAL)  lfn_supported=LFN_COMP; if(limit!=0)  wait_error(M_CRC_ERROR); if(cmd==ARJ_CMD_CHK_INT) {  if(archive_name[0]=='\0')  {   far_strcpyn((char FAR *)archive_name, (char FAR *)exe_name, FILENAME_MAX);   if(!ansi_cpf)    fix_ansi_name(archive_name);  }  use_ansi_cp=1;  set_file_apis(use_ansi_cp);  if(check_integrity(archive_name))   msg_cprintf(0, M_OK);  else  {   arj_delay(BAD_CRC_DELAY);   error(M_CRC_ERROR);  }  exit(ARJ_ERL_SUCCESS); } if(cmd==ARJ_CMD_RECOVER) {  if(archive_name[0]=='\0')   far_strcpyn((char FAR *)archive_name, (char FAR *)exe_name, FILENAME_MAX);  use_ansi_cp=1;  set_file_apis(use_ansi_cp);  name=(char *)malloc_msg(FILENAME_MAX);  msg_strcpy(name, M_ARJFIXED_NAME);  stream=file_create(name, m_wb);  if(stream!=NULL)   fclose(stream);  free(name);  msg_strcpy(tmp_tmp_filename, M_ARJFIXED_NAME);  name=form_prot_name();  if(!protfile_option)   name[0]='\0';  if(recover_file(archive_name, name, tmp_tmp_filename, 0, 0L))  {   tmp_tmp_filename[0]='\0';   error(M_CANT_FIND_DAMAGE, archive_name);  }  msg_cprintf(H_HL|H_NFMT, M_REPAIRED_FILE, tmp_tmp_filename);  tmp_tmp_filename[0]='\0';  free(name);  exit(ARJ_ERL_SUCCESS); } if(argc<2||help_issued||limit!=0) {  check_fmsg(CHKMSG_NOSKIP);  help_issued=1;  use_ansi_cp=1;  #if TARGET==UNIX   allow_any_attrs=FETCH_FILES;  #endif  set_file_apis(use_ansi_cp);  strcpy(archive_name, exe_name);  if(is_tty(stdout))   prompt_for_more=!prompt_for_more;  else   prompt_for_more=0;  indicator_style=IND_NONE;  cmd=ARJ_CMD_PRINT;  file_args=1;  f_arg_array[0]=(argc<2)?brief_help:full_help; } #if TARGET==DOS  if(lfn_supported!=LFN_NOT_SUPPORTED)   msg_cprintf(H_HL, M_LFN_ENABLED); #endif #if defined(HAVE_EAS)  if(ea_supported)   msg_cprintf(H_HL, M_EA_ENABLED); #endif case_path(archive_suffixes); case_path(swptr_t); case_path(archive_ext_list); case_path(target_dir); case_path(index_name); case_path(arjsec_env_name); case_path(list_file); case_path(swptr_hm); case_path(nonexist_name); case_path(arjcrypt_name); case_path(arjdisp_ptr); case_path(filename_to_restart); case_path(work_directory); case_path(extraction_filename); case_path(archive_cmt_name); case_path(comment_file); unix_path_to_dos(target_dir); unix_path_to_dos(index_name); unix_path_to_dos(arjsec_env_name); unix_path_to_dos(list_file); unix_path_to_dos(swptr_hm); unix_path_to_dos(nonexist_name); unix_path_to_dos(arjcrypt_name); unix_path_to_dos(arjdisp_ptr); unix_path_to_dos(filename_to_restart); unix_path_to_dos(work_directory); unix_path_to_dos(extraction_filename); unix_path_to_dos(archive_cmt_name); unix_path_to_dos(comment_file); cmd_setup(&cmd, &is_add_cmd); /* ASR fix: in the open-source release, there is no longer any distinction    between commercial and shareware versions. Therefore, the code which    checks for M_EXT_LIC has been removed. */ #if TARGET!=DOS  if(priority.class>0)   set_priority(&priority); #endif if(run_cmd_at_start&&start_cmd[0]!='\0')  exec_cmd(start_cmd); if(!exclude_files) {  flist_cleanup(&flist_exclusion);  flist_init(&flist_exclusion, FCLIM_EXCLUSION, FL_STANDARD); } flist_add_files(&flist_exclusion, NULL, arjtemp_wildcard, 0, 0, 0, NULL); if(filter_same_or_newer||filter_older)  convert_time_limits(); if(cmd==ARJ_CMD_WHERE||extm_mode)  search_setup(); else if(execute_cmd)  get_exec_cmd(); if(garble_enabled) {  if(!strcmp(garble_password, "?"))  {   tptr=(char *)malloc_msg(INPUT_LENGTH+1);   msg_cprintf(0, M_ENTER_PWD);   read_line_noecho(tptr, INPUT_LENGTH);   garble_password=malloc_str(tptr);   if(is_add_cmd||cmd=='G')   {    msg_cprintf(0, M_VERIFY_PWD);    read_line_noecho(tptr, INPUT_LENGTH);    if(strcmp(tptr, garble_password))     error(M_PWD_MISMATCH);   }   free(tptr);  } } if(garble_password[0]=='\0'&&(cmd==ARJ_CMD_GARBLE||garble_enabled))  error(M_NO_PWD_OPTION); limit=20; if(append_curtime)  append_curtime_proc(); if(is_add_cmd&&file_exists(archive_name)) {  tmp_archive_exists=1;  if(tmp_archive_name==NULL)  {   tmp_archive_used=-1;   tmp_archive_name=malloc_msg(FILENAME_MAX);   tmp_archive_name[0]='\0';   tmp_archive_used=0;  }  split_name(archive_name, tmp_archive_name, NULL);  strcat(tmp_archive_name, arjtemp_spec);  find_tmp_filename(tmp_archive_name);  if(!stricmp(archive_name, tmp_archive_name))   error(M_CANTRENAME, archive_name, tmp_archive_name);  file_unlink(tmp_archive_name);  tmp_archive_removed=1;  rename_with_check(archive_name, tmp_archive_name); } set_file_apis(1); arj_exec_validation(); set_file_apis(use_ansi_cp); #if TARGET!=UNIX  if(cmd!=ARJ_CMD_ORDER)   flist_type=find_dupl_drivespecs(f_arg_array, file_args)?FL_HASH:FL_STANDARD;  else   flist_type=FL_STANDARD; #else  flist_type=FL_STANDARD; #endif numfiles=default_capacity; if((tptr=strchr(debug_opt, 'i'))!=NULL) {  tptr++;  numfiles=(FILE_COUNT)strtol(tptr, &tptr, 10); } if(strchr(debug_opt, 'q')!=NULL)  flist_type=FL_STANDARD; flist_init(&flist_main, numfiles, (char)flist_type); flist_init(&flist_order, FILELIST_CAPACITY, (char)FL_STANDARD); if(is_add_cmd) {  arch_wildcard_allowed=1;  expand_wildcards=1; } else  expand_wildcards=0; name=malloc_msg(FILENAME_MAX); for(j=limit; j<file_args; j++) {  tptr=f_arg_array[j];  if(listchars_allowed&&tptr[0]==listchar)  {   if(*++tptr=='\0')    error(M_MISSING_FILENAME_ARG, f_arg_array[j]);   sort_f=0;   entry=split_name(tptr, NULL, NULL);   if(cmd==ARJ_CMD_ORDER&&!stricmp(tptr+entry, sort_filename))    sort_f=1;   stream=file_open_noarch(tptr, m_r);   tmp_ptr=header;   order[j]=1;   while(fgets(tmp_ptr, FILENAME_MAX, stream)!=NULL)   {    if(sort_f)    {     if(strlen(tmp_ptr)<=121)      tmp_ptr[0]='\0';     else if(tmp_ptr[120]==' ')      strcpy(tmp_ptr, tmp_ptr+121);    }    if(cmd==ARJ_CMD_ORDER&&strpbrk(tmp_ptr, wildcard_pattern)!=NULL)     error(M_ORDER_WILDCARD);    cnv_cmdline_fnm(tmp_ptr);    if(tmp_ptr[0]!='\0')    {     name[0]='\0';     if(is_add_cmd)      strcat(name, target_dir);     strcat(name, tmp_ptr);     count=0;     if(flist_add_files(&flist_main, &flist_exclusion, name, expand_wildcards, recurse_subdirs, allow_any_attrs, &count))     {      j=file_args;      break;     }     if(listfile_err_opt&&count!=0)     {      if(flist_add(&flist_order, NULL, name, NULL, NULL))      {       j=file_args;       break;      }     }    }   }   fclose(stream);  }  else  {   if(cmd==ARJ_CMD_ORDER&&strpbrk(f_arg_array[j], wildcard_pattern))    error(M_ORDER_WILDCARD);   name[0]='\0';   if(is_add_cmd)    strcat(name, target_dir);   strcat(name, f_arg_array[j]);   count=0;   if(flist_add_files(&flist_main, &flist_exclusion, name, expand_wildcards, recurse_subdirs, allow_any_attrs, &count))   {    if(strchr(debug_opt, 'i')!=NULL)     order[j]=count;    break;   }   order[j]=count;  } } if(tmp_archive_removed) {  rename_with_check(tmp_archive_name, archive_name);  tmp_archive_name[0]='\0';  tmp_archive_removed=0; } if(create_list_file) {  stream=file_create(list_file, m_w);  for(cur_file=0; cur_file<flist_main.files; cur_file++)  {   flist_retrieve(name, NULL, &flist_main, cur_file);   strcat(name, lf);   if(fputs(name, stream)==EOF)    error(M_DISK_FULL);  }  fclose(stream); } cfa_init(flist_main.files+1); if(restart_at_filename)  restart_proc(tmp_ptr=header); free(name); if(create_index) {  idxstream=file_open(index_name, m_a);  if(msg_fprintf(idxstream, M_INDEX_HDR)<0)   error(M_DISK_FULL); } if(cmd==ARJ_CMD_ORDER) {  fnm_matching=FMM_FULL_PATH;  arch_hdr_index=farmalloc_msg(((unsigned long)flist_main.files+1L)*sizeof(unsigned long));  for(cur_file=0; cur_file<flist_main.files; cur_file++)   arch_hdr_index[cur_file]=0L; } if(!reg_validation(single_spc, single_spc, single_spc, regdata+REG_HDR_SHIFT))  limit=20; flist_init(&flist_archive, FCLIM_ARCHIVE, FL_STANDARD); flist_add_files(&flist_archive, NULL, archive_name, !is_add_cmd, is_add_cmd?0:recurse_subdirs, allow_any_attrs, NULL); if(flist_archive.files==0) {  msg_cprintf(H_ERR, M_CANT_FIND, archive_name);  errorlevel=ARJ_ERL_CANTOPEN;  errors++; } if(debug_enabled&&strchr(debug_opt, 't')!=NULL)  msg_cprintf(H_HL|H_NFMT, M_N_TICKS, get_ticks()-ticks); check_fmsg(CHKMSG_SKIP); if(quiet_mode==ARJ_QUIET2)  new_stdout=new_stderr; /* The main processing loop */ for(cur_file=limit; cur_file<flist_archive.files; cur_file++) {  if(quiet_mode==ARJ_QUIET2)   new_stdout=new_stderr;  flist_retrieve(archive_name, NULL, &flist_archive, cur_file);  perform_cmd(cmd);  if(cur_file+1<flist_archive.files)   nputlf(); } file_arg_cleanup(&flist_order); errno=0; if(errors>0)  error(M_FOUND_N_ERRORS, errors); return(errorlevel);}

⌨️ 快捷键说明

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