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

📄 unix.c

📁 infozip2.2源码
💻 C
📖 第 1 页 / 共 2 页
字号:
#ifndef QLZIP /* QLZIP Unix2QDOS cross-Zip supplies an extended variant */int set_extra_field(z, z_utim)  struct zlist far *z;  iztimes *z_utim;  /* store full data in local header but just modification time stamp info     in central header */{  struct stat s;  /* For the full sized UT local field including the UID/GID fields, we   * have to stat the file again. */  if (LSSTAT(z->name, &s))    return ZE_OPEN;#define EB_L_UT_SIZE    (EB_HEADSIZE + EB_UT_LEN(2))#define EB_C_UT_SIZE    (EB_HEADSIZE + EB_UT_LEN(1))#define EB_L_UX2_SIZE   (EB_HEADSIZE + EB_UX2_MINLEN)#define EB_C_UX2_SIZE   EB_HEADSIZE#define EF_L_UNIX_SIZE  (EB_L_UT_SIZE + EB_L_UX2_SIZE)#define EF_C_UNIX_SIZE  (EB_C_UT_SIZE + EB_C_UX2_SIZE)  if ((z->extra = (char *)malloc(EF_L_UNIX_SIZE)) == NULL)    return ZE_MEM;  if ((z->cextra = (char *)malloc(EF_C_UNIX_SIZE)) == NULL)    return ZE_MEM;  z->extra[0]  = 'U';  z->extra[1]  = 'T';  z->extra[2]  = EB_UT_LEN(2);          /* length of data part of local e.f. */  z->extra[3]  = 0;  z->extra[4]  = EB_UT_FL_MTIME | EB_UT_FL_ATIME;    /* st_ctime != creation */  z->extra[5]  = (char)(s.st_mtime);  z->extra[6]  = (char)(s.st_mtime >> 8);  z->extra[7]  = (char)(s.st_mtime >> 16);  z->extra[8]  = (char)(s.st_mtime >> 24);  z->extra[9]  = (char)(s.st_atime);  z->extra[10] = (char)(s.st_atime >> 8);  z->extra[11] = (char)(s.st_atime >> 16);  z->extra[12] = (char)(s.st_atime >> 24);  z->extra[13] = 'U';  z->extra[14] = 'x';  z->extra[15] = EB_UX2_MINLEN;         /* length of data part of local e.f. */  z->extra[16]  = 0;  z->extra[17] = (char)(s.st_uid);  z->extra[18] = (char)(s.st_uid >> 8);  z->extra[19] = (char)(s.st_gid);  z->extra[20] = (char)(s.st_gid >> 8);  z->ext = EF_L_UNIX_SIZE;  memcpy(z->cextra, z->extra, EB_C_UT_SIZE);  z->cextra[EB_LEN] = EB_UT_LEN(1);  memcpy(z->cextra+EB_C_UT_SIZE, z->extra+EB_L_UT_SIZE, EB_C_UX2_SIZE);  z->cextra[EB_LEN+EB_C_UT_SIZE] = 0;  z->cext = EF_C_UNIX_SIZE;#if 0  /* UID/GID presence is now signaled by central EF_IZUNIX2 field ! */  /* lower-middle external-attribute byte (unused until now):   *   high bit        => (have GMT mod/acc times) >>> NO LONGER USED! <<<   *   second-high bit => have Unix UID/GID info   * NOTE: The high bit was NEVER used in any official Info-ZIP release,   *       but its future use should be avoided (if possible), since it   *       was used as "GMT mod/acc times local extra field" flags in Zip beta   *       versions 2.0j up to 2.0v, for about 1.5 years.   */  z->atx |= 0x4000;#endif /* never */  return ZE_OK;}#endif /* !QLZIP */int deletedir(d)char *d;                /* directory to delete *//* Delete the directory *d if it is empty, do nothing otherwise.   Return the result of rmdir(), delete(), or system().   For VMS, d must be in format [x.y]z.dir;1  (not [x.y.z]). */{# ifdef NO_RMDIR    /* code from Greg Roelofs, who horked it from Mark Edwards (unzip) */    int r, len;    char *s;              /* malloc'd string for system command */    len = strlen(d);    if ((s = malloc(len + 34)) == NULL)      return 127;    sprintf(s, "IFS=\" \t\n\" /bin/rmdir %s 2>/dev/null", d);    r = system(s);    free(s);    return r;# else /* !NO_RMDIR */    return rmdir(d);# endif /* ?NO_RMDIR */}#endif /* !UTIL *//******************************//*  Function version_local()  *//******************************/#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__386BSD__) || \    defined(__bsdi__)#include <sys/param.h> /* for the BSD4_4 define */#endif/* * XXX sysctl should be used for all the 4.4BSD derivatives */#if defined(__NetBSD__) && (BSD4_4 == 1)#include <sys/sysctl.h>#endifvoid version_local(){    static ZCONST char CompiledWith[] = "Compiled with %s%s for %s%s%s%s.\n\n";#if defined(CRAY) || defined(NX_CURRENT_COMPILER_RELEASE) || defined(NetBSD)    char buf1[40];#if defined(CRAY) || defined(NX_CURRENT_COMPILER_RELEASE)    char buf2[40];#endif#endif#ifdef __NetBSD__    static ZCONST char *netbsd[] = { "_ALPHA", "", "A", "B" };    int mib[] = { CTL_KERN, KERN_OSRELEASE };    size_t len = sizeof(buf1) - sizeof("NetBSD ");#endif    /* Pyramid, NeXT have problems with huge macro expansion, too:  no Info() */    printf(CompiledWith,#ifdef __GNUC__#  ifdef NX_CURRENT_COMPILER_RELEASE      (sprintf(buf1, "NeXT DevKit %d.%02d ", NX_CURRENT_COMPILER_RELEASE/100,        NX_CURRENT_COMPILER_RELEASE%100), buf1),      (strlen(__VERSION__) > 8)? "(gcc)" :        (sprintf(buf2, "(gcc %s)", __VERSION__), buf2),#  else      "gcc ", __VERSION__,#  endif#else#  if defined(CRAY) && defined(_RELEASE)      "cc ", (sprintf(buf1, "version %d", _RELEASE), buf1),#  else#  ifdef __VERSION__      "cc ", __VERSION__,#  else      "cc", "",#  endif#  endif#endif      "Unix",#if defined(sgi) || defined(__sgi)      " (Silicon Graphics IRIX)",#else#ifdef sun#  ifdef sparc#    ifdef __SVR4      " (Sun Sparc/Solaris)",#    else /* may or may not be SunOS */      " (Sun Sparc)",#    endif#  else#  if defined(sun386) || defined(i386)      " (Sun 386i)",#  else#  if defined(mc68020) || defined(__mc68020__)      " (Sun 3)",#  else /* mc68010 or mc68000:  Sun 2 or earlier */      " (Sun 2)",#  endif#  endif#  endif#else#ifdef __hpux      " (HP/UX)",#else#ifdef __osf__      " (DEC OSF/1)",#else#ifdef _AIX      " (IBM AIX)",#else#ifdef aiws      " (IBM RT/AIX)",#else#if defined(CRAY) || defined(cray)#  ifdef _UNICOS      (sprintf(buf2, " (Cray UNICOS release %d)", _UNICOS), buf2),#  else      " (Cray UNICOS)",#  endif#else#if defined(uts) || defined(UTS)      " (Amdahl UTS)",#else#ifdef NeXT#  ifdef mc68000      " (NeXTStep/black)",#  else      " (NeXTStep for Intel)",#  endif#else              /* the next dozen or so are somewhat order-dependent */#if defined(linux) || defined(__linux__)#  ifdef __ELF__      " (Linux ELF)",#  else      " (Linux a.out)",#  endif#else#ifdef MINIX      " (Minix)",#else#ifdef M_UNIX      " (SCO Unix)",#else#ifdef M_XENIX      " (SCO Xenix)",#else#ifdef __NetBSD__#  ifdef NetBSD0_8     (sprintf(buf1, " (NetBSD 0.8%s)", netbsd[NetBSD0_8]), buf1),#  else#  ifdef NetBSD0_9     (sprintf(buf1, " (NetBSD 0.9%s)", netbsd[NetBSD0_9]), buf1),#  else#  ifdef NetBSD1_0     (sprintf(buf1, " (NetBSD 1.0%s)", netbsd[NetBSD1_0]), buf1),#  else     (strcpy(buf1, " (NetBSD "), sysctl(mib, 2, &buf1[9], &len, NULL, 0),      strcat(buf1,")")),#  endif /* NetBSD1_0 */#  endif /* NetBSD0_9 */#  endif /* NetBSD0_8 */#else#ifdef __FreeBSD__      (BSD4_4 == 0.5)? " (FreeBSD 1.x)" : " (FreeBSD 2.0 or later)",#else#ifdef __bsdi__      (BSD4_4 == 0.5)? " (BSD/386 1.0)" : " (BSD/386 1.1 or later)",#else#ifdef __386BSD__      (BSD4_4 == 1)? " (386BSD, post-4.4 release)" : " (386BSD)",#else#if defined(i486) || defined(__i486) || defined(__i486__)      " (Intel 486)",#else#if defined(i386) || defined(__i386) || defined(__i386__)      " (Intel 386)",#else#ifdef pyr      " (Pyramid)",#else#if defined(ultrix) || defined(__ultrix)#  if defined(mips) || defined(__mips)      " (DEC/MIPS)",#  else#  if defined(vax) || defined(__vax)      " (DEC/VAX)",#  else /* __alpha? */      " (DEC/Alpha)",#  endif#  endif#else#ifdef gould      " (Gould)",#else#ifdef MTS      " (MTS)",#else#ifdef __convexc__      " (Convex)",#else#ifdef __QNX__      " (QNX 4)",#else#ifdef __QNXNTO__      " (QNX Neutrino)",#else      "",#endif /* QNX Neutrino */#endif /* QNX 4 */#endif /* Convex */#endif /* MTS */#endif /* Gould */#endif /* DEC */#endif /* Pyramid */#endif /* 386 */#endif /* 486 */#endif /* 386BSD */#endif /* BSDI BSD/386 */#endif /* NetBSD */#endif /* FreeBSD */#endif /* SCO Xenix */#endif /* SCO Unix */#endif /* Minix */#endif /* Linux */#endif /* NeXT */#endif /* Amdahl */#endif /* Cray */#endif /* RT/AIX */#endif /* AIX */#endif /* OSF/1 */#endif /* HP/UX */#endif /* Sun */#endif /* SGI */#ifdef __DATE__      " on ", __DATE__#else      "", ""#endif    );} /* end function version_local() */

⌨️ 快捷键说明

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