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

📄 tailor.c

📁 一些关于HTTP协议处理的文档,还包括了gzip包(它是用来解压缩HTTP传送的压缩数据)
💻 C
字号:
/* tailor.c -- target dependent functions * Copyright (C) 1993 Carsten Steger (carsten.steger@informatik.tu-muenchen.de) * This is free software; you can redistribute it and/or modify it under the * terms of the GNU General Public License, see the file COPYING. *//* * This file contains Amiga specific functions for gzip. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <error.h>#include <time.h>#include <utime.h>#include <exec/types.h>#include <dos/dos.h>#include <dos/dosextens.h>#include <dos/dosasl.h>#include <proto/dos.h>#define MAXPATH 1024#define MAXARGS 512extern struct DosLibrary *DOSBase;extern void *xmalloc(unsigned int size);static char *expand_next_file (char *pattern);static int in_prev_args (char *arg, char **argv, int argc);extern void _expand_args (int *oargc, char ***oargv);static char *expand_next_file (pattern)     char *pattern;{  long err;  char *pathname;  static struct AnchorPath *an = NULL;  pathname = NULL;  if (pattern == NULL)    err = -1;  else    do      {        if (an == NULL)          {            an = xmalloc (sizeof (struct AnchorPath) + MAXPATH);            memset (an, 0, sizeof (struct AnchorPath) + MAXPATH);            an->ap_BreakBits = SIGBREAKF_CTRL_C;            an->ap_Strlen = MAXPATH;            an->ap_Flags = APF_DOWILD;            err = MatchFirst (pattern, an);          }        else          err = MatchNext (an);        pathname = an->ap_Buf;      } while (err == 0 && pathname == NULL);  if (err)    {      MatchEnd (an);      free (an);      an = NULL;      return NULL;    }  else    return pathname;}static int in_prev_args (arg, argv, argc)     char *arg, **argv;     int argc;{  int i, is_in_args;  is_in_args = 0;  for (i = 1; i < argc - 1; i++)    if (stricmp (arg, argv[i]) == 0)      is_in_args = 1;  return is_in_args;}void _expand_args (oargc, oargv)     int *oargc;     char ***oargv;{  int i;  char *str, **argv;  static char buf[MAXPATH];  int argc, no_match_at_all, num_matches, contains_wildcards;  /* With Kickstart 1.3 wildcards can't be expanded. */  if (DOSBase->dl_lib.lib_Version < 37) return;  no_match_at_all = 1;  contains_wildcards = 0;  argc = 0;  argv = xmalloc (MAXARGS * sizeof (char *));  argv[argc++] = (*oargv)[0];  for (i = 1; i < *oargc; i++)    {      if (ParsePattern ((*oargv)[i], buf, MAXPATH))        {          contains_wildcards = 1;          num_matches = 0;          while (str = expand_next_file ((*oargv)[i]))            if (argc >= MAXARGS)              {                expand_next_file (NULL);                fprintf (stderr,"Too many files.\n");                exit (20);              }            else              {                /* Avoid duplicate entries */                if (!in_prev_args (str, argv, argc))                  {                    argv[argc++] = strdup (str);                    num_matches++;                  }              }          if (num_matches != 0)            no_match_at_all = 0;        }      else        if (argc >= MAXARGS)          {            fprintf (stderr,"Too many files.\n");            exit (20);          }        else          {            if (!in_prev_args ((*oargv)[i], argv, argc))              argv[argc++] = (*oargv)[i];          }    }  *oargc = argc;  *oargv = argv;  if (no_match_at_all && contains_wildcards) {    fprintf (stderr,"No match.\n");    exit (20);  }}int utime (path, times)     char *path;     struct utimbuf *times;{  struct DateStamp date;  LONG error;  time_t modtime;  /* With Kickstart 1.3 setting the filedate could be done, I guess.   * Maybe someone else will implement and test the code for this   * case (I don't have Kickstart 1.3). */  if (DOSBase->dl_lib.lib_Version < 37) return 0;  /* Amiga dates are counted from 1. Jan 1978 as opposed to 1. Jan 1970   * on Unix. Therefore we have to subtract 2922 days (8*365+2). We also   * have to subtract the value of __timezone since SAS/C uses "CST+06"   * as the default value. */  modtime = times->modtime - __timezone;  date.ds_Days = (modtime / 86400) - 2922;  modtime %= 86400;  date.ds_Minute = modtime / 60;  modtime %= 60;  date.ds_Tick = modtime * TICKS_PER_SECOND;  error = SetFileDate (path, &date);  if (error == DOSFALSE)    {      errno = EOSERR;      return -1;    }  return 0;}

⌨️ 快捷键说明

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