📄 unix.c
字号:
#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 + -