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

📄 printers.c

📁 ipp打印机服务器原代码 注意:请将ipp.gz改为ipp.tar.gz 然后使用tar zxvf ipp.tar.gz解压 站长注意
💻 C
📖 第 1 页 / 共 5 页
字号:
      for (i = 0; i < NumBanners; i ++)	attr->values[i + 1].string.text = strdup(Banners[i].name);    }  }#endif  DEBUG_printf(("Function CreateCommonData() \n")); }#if	0/* * 'DeleteAllPrinters()' - Delete all printers from the system. */voidDeleteAllPrinters(void){  printer_t	*p,	/* Pointer to current printer/class */		*next;	/* Pointer to next printer in list */  for (p = Printers; p != NULL; p = next)  {    next = p->next;    if (!(p->type & CUPS_PRINTER_CLASS))      DeletePrinter(p, 0);  }}/* * 'DeletePrinter()' - Delete a printer from the system. */voidDeletePrinter(printer_t *p,		/* I - Printer to delete */	      int       update)		/* I - Update printers.conf? */{  int		i;			/* Looping var */  printer_t	*current,		/* Current printer in list */		*prev;			/* Previous printer in list */#ifdef __sgi  char		filename[1024];		/* Interface script filename */#endif /* __sgi */  DEBUG_printf(("DeletePrinter(%08x): p->name = \"%s\"...\n", p, p->name)); /*  * Range check input...  */  if (p == NULL)    return; /*  * Find the printer in the list...  */  for (prev = NULL, current = Printers;       current != NULL;       prev = current, current = current->next)    if (p == current)      break;  if (current == NULL)  {    LogMessage(L_ERROR, "Tried to delete a non-existent printer %s!\n",               p->name);    return;  } /*  * Remove the printer from the list...  */  if (prev == NULL)    Printers = p->next;  else    prev->next = p->next;  NumPrinters --; /*  * Stop printing on this printer...  */  StopPrinter(p, update); /*  * If this printer is the next for browsing, point to the next one...  */  if (p == BrowseNext)    BrowseNext = p->next; /*  * Remove the dummy interface/icon/option files under IRIX...  */#ifdef __sgi  snprintf(filename, sizeof(filename), "/var/spool/lp/interface/%s", p->name);  unlink(filename);  snprintf(filename, sizeof(filename), "/var/spool/lp/gui_interface/ELF/%s.gui",           p->name);  unlink(filename);  snprintf(filename, sizeof(filename), "/var/spool/lp/activeicons/%s", p->name);  unlink(filename);  snprintf(filename, sizeof(filename), "/var/spool/lp/pod/%s.config", p->name);  unlink(filename);  snprintf(filename, sizeof(filename), "/var/spool/lp/pod/%s.status", p->name);  unlink(filename);  snprintf(filename, sizeof(filename), "/var/spool/lp/member/%s", p->name);  unlink(filename);#endif /* __sgi */ /*  * If p is the default printer, assign the next one...  */  if (p == DefaultPrinter)  {    DefaultPrinter = Printers;    WritePrintcap();  } /*  * Remove this printer from any classes...  */  if (!(p->type & CUPS_PRINTER_IMPLICIT))    DeletePrinterFromClasses(p); /*  * Free all memory used by the printer...  */  if (p->printers != NULL)    free(p->printers);  if (MaxPrinterHistory)  {    for (i = 0; i < p->num_history; i ++)      ippDelete(p->history[i]);    free(p->history);  }  for (i = 0; i < p->num_reasons; i ++)    free(p->reasons[i]);  ippDelete(p->attrs);  DeletePrinterFilters(p);  FreePrinterUsers(p);  FreeQuotas(p);  ClearString(&p->uri);  ClearString(&p->hostname);  ClearString(&p->name);  ClearString(&p->location);  ClearString(&p->make_model);  ClearString(&p->info);  ClearString(&p->job_sheets[0]);  ClearString(&p->job_sheets[1]);  ClearString(&p->device_uri);  free(p); /*  * Write a new /etc/printcap file...  */  WritePrintcap();}/* * 'DeletePrinterFilters()' - Delete all MIME filters for a printer. */voidDeletePrinterFilters(printer_t *p)	/* I - Printer to remove from */{  int		i;			/* Looping var */  mime_filter_t	*filter;		/* MIME filter looping var */ /*  * Range check input...  */  if (p == NULL)    return; /*  * Remove all filters from the MIME database that have a destination  * type == printer...  */  for (filter = MimeDatabase->filters, i = MimeDatabase->num_filters;       i > 0;       i --, filter ++)    if (filter->dst == p->filetype)    {     /*      * Delete the current filter...      */      MimeDatabase->num_filters --;      if (i > 1)        memmove(filter, filter + 1, sizeof(mime_filter_t) * (i - 1));      filter --;    }}#endif/* * 'FindDest()' - Find a destination in the list. */printer_t *			/* O - Destination in list */FindDest(const char *name)	/* I - Name of printer or class to find */{  printer_t	*p;		/* Current destination */  int		diff;		/* Difference */  for (p = Printers; p != NULL; p = p->next)    if ((diff = strcasecmp(name, p->name)) == 0)/* name == p->name */      return (p);    else if (diff < 0)				/* name < p->name */      return (NULL);  return (NULL);}/* * 'FindPrinter()' - Find a printer in the list. */printer_t *			/* O - Printer in list */FindPrinter(const char *name)	/* I - Name of printer to find */{  printer_t	*p;		/* Current printer */  int		diff;		/* Difference */  for (p = Printers; p != NULL; p = p->next)    if ((diff = strcasecmp(name, p->name)) == 0 )/* &&        !(p->type & CUPS_PRINTER_CLASS))	name == p->name */      return (p);    else if (diff < 0)				/* name < p->name */      return (NULL);  return (NULL);}#if	0/* * 'FreePrinterUsers()' - Free allow/deny users. */voidFreePrinterUsers(printer_t *p)	/* I - Printer */{  int	i;			/* Looping var */  if (!p || !p->num_users)    return;  for (i = 0; i < p->num_users; i ++)    free((void *)p->users[i]);  free(p->users);  p->num_users = 0;  p->users     = NULL;}#endif/* * 'LoadAllPrinters()' - Load printers from the printers.conf file. */voidLoadAllPrinters(void){  cups_file_t	*fp;			/* printers.conf file */  int		linenum;		/* Current line number */  int		len;			/* Length of line */  char		line[1024],		/* Line from file */		name[256],		/* Parameter name */		*nameptr,		/* Pointer into name */		*value,			/* Pointer to value */		*valueptr;		/* Pointer into value */  printer_t	*p;			/* Current printer */ /*  * Open the printers.conf file...  */  snprintf(line, sizeof(line), "%s/printers.conf", ServerRoot);  DEBUG_printf(("open(%s)\n",line));   if ((fp = cupsFileOpen(line, "r")) == NULL)  {    LogMessage(L_ERROR, "LoadAllPrinters: Unable to open %s - %s", line,               strerror(errno));    return;  } /*  * Read printer configurations until we hit EOF...  */  linenum = 0;  p       = NULL;  while (cupsFileGets(fp, line, sizeof(line)) != NULL)  {    linenum ++;   /*    * Skip comment lines...    */    if (line[0] == '#')      continue;   /*    * Strip trailing whitespace, if any...    */    len = strlen(line);    while (len > 0 && isspace(line[len - 1] & 255))    {      len --;      line[len] = '\0';    }   /*    * Extract the name from the beginning of the line...    */    for (value = line; isspace(*value & 255); value ++);    for (nameptr = name; *value != '\0' && !isspace(*value & 255) &&                             nameptr < (name + sizeof(name) - 1);)      *nameptr++ = *value++;    *nameptr = '\0';    while (isspace(*value & 255))      value ++;    if (name[0] == '\0')      continue;   /*    * Decode the directive...    */    if (strcmp(name, "<Printer") == 0 ||        strcmp(name, "<DefaultPrinter") == 0)    {     /*      * <Printer name> or <DefaultPrinter name>      */      if (line[len - 1] == '>' && p == NULL)      {       /*        * Add the printer and a base file type...	*/        line[len - 1] = '\0';        LogMessage(L_DEBUG, "LoadAllPrinters: Loading printer %s...", value);        p = AddPrinter(value);	p->accepting = 1;	p->state     = IPP_PRINTER_IDLE;       /*        * Set the default printer as needed...	*/        if (strcmp(name, "<DefaultPrinter") == 0)	  DefaultPrinter = p;      }      else      {        LogMessage(L_ERROR, "Syntax error on line %d of printers.conf.",	           linenum);        return;      }    }    else if (strcmp(name, "</Printer>") == 0)    {      if (p != NULL)      {        SetPrinterAttrs(p);	AddPrinterHistory(p);        p = NULL;      }      else      {        LogMessage(L_ERROR, "Syntax error on line %d of printers.conf.",	           linenum);        return;      }    }    else if (p == NULL)    {      LogMessage(L_ERROR, "Syntax error on line %d of printers.conf.",	         linenum);      return;    }    else if (strcmp(name, "Info") == 0)      SetString(&p->info, value);    else if (strcmp(name, "Location") == 0)      SetString(&p->location, value);    else if (strcmp(name, "DeviceURI") == 0)      SetString(&p->device_uri, value);    else if (strcmp(name, "State") == 0)    {     /*      * Set the initial queue state...      */      if (strcasecmp(value, "idle") == 0)        p->state = IPP_PRINTER_IDLE;      else if (strcasecmp(value, "stopped") == 0)        p->state = IPP_PRINTER_STOPPED;    }    else if (strcmp(name, "StateMessage") == 0)    {     /*      * Set the initial queue state message...      */      while (isspace(*value & 255))        value ++;      strlcpy(p->state_message, value, sizeof(p->state_message));    }    else if (strcmp(name, "Accepting") == 0)    {     /*      * Set the initial accepting state...      */      if (strcasecmp(value, "yes") == 0)        p->accepting = 1;      else        p->accepting = 0;    }	    else if (strcmp(name, "JobSheets") == 0)    {     /*      * Set the initial job sheets...      */      for (valueptr = value; *valueptr && !isspace(*valueptr & 255); valueptr ++);      if (*valueptr)        *valueptr++ = '\0';      SetString(&p->job_sheets[0], value);      while (isspace(*valueptr & 255))        valueptr ++;      if (*valueptr)      {        for (value = valueptr; *valueptr && !isspace(*valueptr & 255); valueptr ++);	if (*valueptr)          *valueptr++ = '\0';	SetString(&p->job_sheets[1], value);      }    }    else if (strcmp(name, "AllowUser") == 0)    {      p->deny_users = 0;      AddPrinterUser(p, value);    }    else if (strcmp(name, "DenyUser") == 0)

⌨️ 快捷键说明

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