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

📄 nt.c

📁 《汇编源代码大全》
💻 C
字号:
/* * NT specific functions for ZIP. * * The NT version of ZIP heavily relies on the MSDOS and OS2 versions, * since we have to do similar things to switch between NTFS, HPFS and FAT. */#include "zip.h"#include <stdlib.h>#include <stdio.h>#include <time.h>#include <ctype.h>#include <windows.h>#include "ntzip.h"#define A_RONLY    0x01#define A_HIDDEN   0x02#define A_SYSTEM   0x04#define A_LABEL    0x08#define A_DIR      0x10#define A_ARCHIVE  0x20#define EAID     0x0009#ifndef UTILextern int noisy;/* FAT / HPFS detection */int IsFileSystemFAT(char *dir){  char root[4];  char vname[128];  DWORD vnamesize = sizeof(vname);  DWORD vserial;  DWORD vfnsize;  DWORD vfsflags;  char vfsname[128];  DWORD vfsnamesize = sizeof(vfsname);      /*     * We separate FAT and HPFS+other file systems here.     * I consider other systems to be similar to HPFS/NTFS, i.e.     * support for long file names and being case sensitive to some extent.     */    strncpy(root, dir, 3);    if ( isalpha(root[0]) && (root[1] == ':') ) {      root[0] = to_up(dir[0]);      root[2] = '\\';      root[3] = 0;    }    else {      root[0] = '\\';      root[1] = 0;    }    if ( !GetVolumeInformation(root, vname, vnamesize,                         &vserial, &vfnsize, &vfsflags,                         vfsname, vfsnamesize)) {        fprintf(mesg, "zip diagnostic: GetVolumeInformation failed\n");        return(FALSE);    }    return( strcmp(vfsname, "FAT") == 0 );}/* access mode bits and time stamp */int GetFileMode(char *name){DWORD dwAttr;  dwAttr = GetFileAttributes(name);  if ( dwAttr == -1 ) {    fprintf(mesg, "zip diagnostic: GetFileAttributes failed\n");    return(0x20); /* the most likely, though why the error? security? */  }  return(          (dwAttr&FILE_ATTRIBUTE_READONLY  ? A_RONLY   :0)        | (dwAttr&FILE_ATTRIBUTE_HIDDEN    ? A_HIDDEN  :0)        | (dwAttr&FILE_ATTRIBUTE_SYSTEM    ? A_SYSTEM  :0)        | (dwAttr&FILE_ATTRIBUTE_DIRECTORY ? A_DIR     :0)        | (dwAttr&FILE_ATTRIBUTE_ARCHIVE   ? A_ARCHIVE :0));}long GetTheFileTime(char *name){HANDLE h;FILETIME ft, lft;WORD dh, dl;  h = CreateFile(name, GENERIC_READ, 0, NULL, OPEN_EXISTING,                 FILE_ATTRIBUTE_NORMAL, NULL);  if ( h != INVALID_HANDLE_VALUE ) {    GetFileTime(h, NULL, NULL, &ft);    FileTimeToLocalFileTime( &ft, &lft);    FileTimeToDosDateTime( &lft, &dh, &dl);    CloseHandle(h);    return(dh<<16) | dl;  }  else    return 0L;}void ChangeNameForFAT(char *name){  char *src, *dst, *next, *ptr, *dot, *start;  static char invalid[] = ":;,=+\"[]<>| \t";  if ( isalpha(name[0]) && (name[1] == ':') )    start = name + 2;  else    start = name;  src = dst = start;  if ( (*src == '/') || (*src == '\\') )    src++, dst++;  while ( *src )  {    for ( next = src; *next && (*next != '/') && (*next != '\\'); next++ );    for ( ptr = src, dot = NULL; ptr < next; ptr++ )      if ( *ptr == '.' )      {        dot = ptr; /* remember last dot */        *ptr = '_';      }    if ( dot == NULL )      for ( ptr = src; ptr < next; ptr++ )        if ( *ptr == '_' )          dot = ptr; /* remember last _ as if it were a dot */    if ( dot && (dot > src) &&         ((next - dot <= 4) ||          ((next - src > 8) && (dot - src > 3))) )    {      if ( dot )        *dot = '.';      for ( ptr = src; (ptr < dot) && ((ptr - src) < 8); ptr++ )        *dst++ = *ptr;      for ( ptr = dot; (ptr < next) && ((ptr - dot) < 4); ptr++ )        *dst++ = *ptr;    }    else    {      if ( dot && (next - src == 1) )        *dot = '.';           /* special case: "." as a path component */      for ( ptr = src; (ptr < next) && ((ptr - src) < 8); ptr++ )        *dst++ = *ptr;    }    *dst++ = *next; /* either '/' or 0 */    if ( *next )    {      src = next + 1;      if ( *src == 0 ) /* handle trailing '/' on dirs ! */        *dst = 0;    }    else      break;  }  for ( src = start; *src != 0; ++src )    if ( (strchr(invalid, *src) != NULL) || (*src == ' ') )      *src = '_';}char *GetLongPathEA(char *name){        return(NULL); /* volunteers ? */}int IsFileNameValid(x)char *x;{        WIN32_FIND_DATA fd;        HANDLE h = FindFirstFile(x, &fd);        if (h == INVALID_HANDLE_VALUE) return FALSE;        FindClose(h);        return TRUE;}#endif /* UTIL */char *StringLower(char *szArg){  unsigned char *szPtr;  for ( szPtr = szArg; *szPtr; szPtr++ )    *szPtr = lower[*szPtr];  return szArg;}

⌨️ 快捷键说明

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