本文整理汇总了C++中cupsArrayAdd函数的典型用法代码示例。如果您正苦于以下问题:C++ cupsArrayAdd函数的具体用法?C++ cupsArrayAdd怎么用?C++ cupsArrayAdd使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cupsArrayAdd函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: help_add_word
static help_word_t * /* O - New word */
help_add_word(help_node_t *n, /* I - Node */
const char *text) /* I - Word text */
{
help_word_t *w, /* New word */
key; /* Search key */
DEBUG_printf(("2help_add_word(n=%p, text=\"%s\")", n, text));
/*
* Create the words array as needed...
*/
if (!n->words)
n->words = cupsArrayNew((cups_array_func_t)help_sort_words, NULL);
/*
* See if the word is already added...
*/
key.text = (char *)text;
if ((w = (help_word_t *)cupsArrayFind(n->words, &key)) == NULL)
{
/*
* Create a new word...
*/
if ((w = calloc(1, sizeof(help_word_t))) == NULL)
return (NULL);
if ((w->text = strdup(text)) == NULL)
{
free(w);
return (NULL);
}
cupsArrayAdd(n->words, w);
}
/*
* Bump the counter for this word and return it...
*/
w->count ++;
return (w);
}
开发者ID:josephgbr,项目名称:cups-pt_BR,代码行数:49,代码来源:help-index.c
示例2: _pwgMediaForLegacy
_pwg_media_t * /* O - Matching size or NULL */
_pwgMediaForLegacy(
const char *legacy) /* I - Legacy size name */
{
_pwg_media_t key; /* Search key */
_cups_globals_t *cg = _cupsGlobals(); /* Global data */
/*
* Range check input...
*/
if (!legacy)
return (NULL);
/*
* Build the lookup table for PWG names as needed...
*/
if (!cg->leg_size_lut)
{
int i; /* Looping var */
_pwg_media_t *size; /* Current size */
cg->leg_size_lut = cupsArrayNew((cups_array_func_t)pwg_compare_legacy,
NULL);
for (i = (int)(sizeof(cups_pwg_media) / sizeof(cups_pwg_media[0])),
size = (_pwg_media_t *)cups_pwg_media;
i > 0;
i --, size ++)
if (size->legacy)
cupsArrayAdd(cg->leg_size_lut, size);
}
/*
* Lookup the name...
*/
key.legacy = legacy;
return ((_pwg_media_t *)cupsArrayFind(cg->leg_size_lut, &key));
}
开发者ID:MasterPlexus,项目名称:vendor_goldenve,代码行数:42,代码来源:pwg-media.c
示例3: dnssdRegisterCallback
static void
dnssdRegisterCallback(
DNSServiceRef sdRef, /* I - DNS Service reference */
DNSServiceFlags flags, /* I - Reserved for future use */
DNSServiceErrorType errorCode, /* I - Error code */
const char *name, /* I - Service name */
const char *regtype, /* I - Service type */
const char *domain, /* I - Domain. ".local" for now */
void *context) /* I - Printer */
{
cupsd_printer_t *p = (cupsd_printer_t *)context;
/* Current printer */
(void)sdRef;
(void)flags;
(void)domain;
cupsdLogMessage(CUPSD_LOG_DEBUG2, "dnssdRegisterCallback(%s, %s) for %s (%s)",
name, regtype, p ? p->name : "Web Interface",
p ? (p->reg_name ? p->reg_name : "(null)") : "NA");
if (errorCode)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"DNSServiceRegister failed with error %d", (int)errorCode);
return;
}
else if (p && (!p->reg_name || _cups_strcasecmp(name, p->reg_name)))
{
cupsdLogMessage(CUPSD_LOG_INFO, "Using service name \"%s\" for \"%s\"",
name, p->name);
cupsArrayRemove(DNSSDPrinters, p);
cupsdSetString(&p->reg_name, name);
cupsArrayAdd(DNSSDPrinters, p);
LastEvent |= CUPSD_EVENT_PRINTER_MODIFIED;
}
}
开发者ID:AndychenCL,项目名称:cups,代码行数:40,代码来源:dirsvc.c
示例4: collect_formats
static cups_array_t * /* O - Array of format strings */
collect_formats(const char *id) /* I - msgid string */
{
cups_array_t *fmts; /* Array of format strings */
char buf[255], /* Format string buffer */
*bufptr; /* Pointer into format string */
fmts = cupsArrayNew(NULL, NULL);
while ((id = strchr(id, '%')) != NULL)
{
if (id[1] == '%')
{
/*
* Skip %%...
*/
id += 2;
continue;
}
for (bufptr = buf; *id && bufptr < (buf + sizeof(buf) - 1); id ++)
{
*bufptr++ = *id;
if (strchr("CDEFGIOSUXcdeifgopsux", *id))
{
id ++;
break;
}
}
*bufptr = '\0';
cupsArrayAdd(fmts, strdup(buf));
}
return (fmts);
}
开发者ID:alfintatorkace,项目名称:osx-10.9-opensource,代码行数:39,代码来源:checkpo.c
示例5: mime_add_fcache
static const char * /* O - Full path to filter or NULL */
mime_add_fcache(
cups_array_t *filtercache, /* I - Filter cache */
const char *name, /* I - Filter name */
const char *filterpath) /* I - Filter path */
{
_mime_fcache_t key, /* Search key */
*temp; /* New filter cache */
char path[1024]; /* Full path to filter */
DEBUG_printf(("2mime_add_fcache(filtercache=%p, name=\"%s\", "
"filterpath=\"%s\")", filtercache, name, filterpath));
key.name = (char *)name;
if ((temp = (_mime_fcache_t *)cupsArrayFind(filtercache, &key)) != NULL)
{
DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path));
return (temp->path);
}
if ((temp = calloc(1, sizeof(_mime_fcache_t))) == NULL)
{
DEBUG_puts("3mime_add_fcache: Returning NULL.");
return (NULL);
}
temp->name = strdup(name);
if (cupsFileFind(name, filterpath, 1, path, sizeof(path)))
temp->path = strdup(path);
cupsArrayAdd(filtercache, temp);
DEBUG_printf(("3mime_add_fcache: Returning \"%s\".", temp->path));
return (temp->path);
}
开发者ID:alfintatorkace,项目名称:osx-10.9-opensource,代码行数:37,代码来源:mime.c
示例6: load_words
static int /* O - 1 on success, 0 on failure */
load_words(const char *filename, /* I - File to load */
cups_array_t *array) /* I - Array to add to */
{
FILE *fp; /* Test file */
char word[256]; /* Word from file */
if ((fp = fopen(filename, "r")) == NULL)
{
perror(filename);
return (0);
}
while (fscanf(fp, "%255s", word) == 1)
{
if (!cupsArrayFind(array, word))
cupsArrayAdd(array, strdup(word));
}
fclose(fp);
return (1);
}
开发者ID:jianglei12138,项目名称:ghostscript,代码行数:24,代码来源:testarray.c
示例7: _ppdGetLanguages
cups_array_t * /* O - Languages array */
_ppdGetLanguages(ppd_file_t *ppd) /* I - PPD file */
{
cups_array_t *languages; /* Languages array */
ppd_attr_t *attr; /* cupsLanguages attribute */
char *value, /* Copy of attribute value */
*start, /* Start of current language */
*ptr; /* Pointer into languages */
/*
* See if we have a cupsLanguages attribute...
*/
if ((attr = ppdFindAttr(ppd, "cupsLanguages", NULL)) == NULL || !attr->value)
return (NULL);
/*
* Yes, load the list...
*/
if ((languages = cupsArrayNew((cups_array_func_t)strcmp, NULL)) == NULL)
return (NULL);
if ((value = strdup(attr->value)) == NULL)
{
cupsArrayDelete(languages);
return (NULL);
}
for (ptr = value; *ptr;)
{
/*
* Skip leading whitespace...
*/
while (_cups_isspace(*ptr))
ptr ++;
if (!*ptr)
break;
/*
* Find the end of this language name...
*/
for (start = ptr; *ptr && !_cups_isspace(*ptr); ptr ++);
if (*ptr)
*ptr++ = '\0';
if (!strcmp(start, "en"))
continue;
cupsArrayAdd(languages, strdup(start));
}
/*
* Free the temporary string and return either an array with one or more
* values or a NULL pointer...
*/
free(value);
if (cupsArrayCount(languages) == 0)
{
cupsArrayDelete(languages);
return (NULL);
}
else
return (languages);
}
开发者ID:CODECOMMUNITY,项目名称:cups,代码行数:72,代码来源:ppd-localize.c
示例8: _cupsMessageLoad
//.........这里部分代码省略.........
*ptr = '\0';
/*
* Find start of value...
*/
if ((ptr = strchr(s, '\"')) == NULL)
continue;
ptr ++;
/*
* Unquote the text...
*/
if (unquote)
cups_unquote(ptr, ptr);
/*
* Create or add to a message...
*/
if (!strncmp(s, "msgid", 5))
{
/*
* Add previous message as needed...
*/
if (m)
{
if (m->str && m->str[0])
{
cupsArrayAdd(a, m);
}
else
{
/*
* Translation is empty, don't add it... (STR #4033)
*/
free(m->id);
if (m->str)
free(m->str);
free(m);
}
}
/*
* Create a new message with the given msgid string...
*/
if ((m = (_cups_message_t *)calloc(1, sizeof(_cups_message_t))) == NULL)
{
cupsFileClose(fp);
return (a);
}
if ((m->id = strdup(ptr)) == NULL)
{
free(m);
cupsFileClose(fp);
return (a);
}
}
else if (s[0] == '\"' && m)
开发者ID:jianglei12138,项目名称:cups,代码行数:67,代码来源:language.c
示例9: ppd_test_constraints
//.........这里部分代码省略.........
else
value = choice;
}
else if ((value = cupsGetOption(constptr->option->keyword, num_options,
options)) != NULL)
{
if (!_cups_strncasecmp(value, "Custom.", 7))
value = "Custom";
}
else if (constptr->choice->marked)
value = constptr->choice->choice;
else
value = NULL;
/*
* Now check AP_FIRSTPAGE_option...
*/
snprintf(firstpage, sizeof(firstpage), "AP_FIRSTPAGE_%s",
constptr->option->keyword);
if (option && choice && !_cups_strcasecmp(option, firstpage))
{
if (!_cups_strncasecmp(choice, "Custom.", 7))
firstvalue = "Custom";
else
firstvalue = choice;
}
else if ((firstvalue = cupsGetOption(firstpage, num_options,
options)) != NULL)
{
if (!_cups_strncasecmp(firstvalue, "Custom.", 7))
firstvalue = "Custom";
}
else
firstvalue = NULL;
DEBUG_printf(("9ppd_test_constraints: value=%s, firstvalue=%s", value,
firstvalue));
if ((!value || _cups_strcasecmp(value, constptr->choice->choice)) &&
(!firstvalue || _cups_strcasecmp(firstvalue, constptr->choice->choice)))
{
DEBUG_puts("9ppd_test_constraints: NO");
break;
}
}
else if (option && choice &&
!_cups_strcasecmp(option, constptr->option->keyword))
{
if (!_cups_strcasecmp(choice, "None") || !_cups_strcasecmp(choice, "Off") ||
!_cups_strcasecmp(choice, "False"))
{
DEBUG_puts("9ppd_test_constraints: NO");
break;
}
}
else if ((value = cupsGetOption(constptr->option->keyword, num_options,
options)) != NULL)
{
if (!_cups_strcasecmp(value, "None") || !_cups_strcasecmp(value, "Off") ||
!_cups_strcasecmp(value, "False"))
{
DEBUG_puts("9ppd_test_constraints: NO");
break;
}
}
else
{
key.option = constptr->option;
if ((marked = (ppd_choice_t *)cupsArrayFind(ppd->marked, &key))
== NULL ||
(!_cups_strcasecmp(marked->choice, "None") ||
!_cups_strcasecmp(marked->choice, "Off") ||
!_cups_strcasecmp(marked->choice, "False")))
{
DEBUG_puts("9ppd_test_constraints: NO");
break;
}
}
}
if (i <= 0)
{
if (!active)
active = cupsArrayNew(NULL, NULL);
cupsArrayAdd(active, consts);
DEBUG_puts("9ppd_test_constraints: Added...");
}
}
cupsArrayRestore(ppd->marked);
DEBUG_printf(("8ppd_test_constraints: Found %d active constraints!",
cupsArrayCount(active)));
return (active);
}
开发者ID:Cacauu,项目名称:cups,代码行数:101,代码来源:ppd-conflicts.c
示例10: get_device
static cups_device_t * /* O - Device */
get_device(cups_array_t *devices, /* I - Device array */
const char *serviceName, /* I - Name of service/device */
const char *regtype, /* I - Type of service */
const char *replyDomain) /* I - Service domain */
{
cups_device_t key, /* Search key */
*device; /* Device */
char fullName[kDNSServiceMaxDomainName];
/* Full name for query */
/*
* See if this is a new device...
*/
key.name = (char *)serviceName;
key.type = device_type(regtype);
for (device = cupsArrayFind(devices, &key);
device;
device = cupsArrayNext(devices))
if (_cups_strcasecmp(device->name, key.name))
break;
else if (device->type == key.type)
{
if (!_cups_strcasecmp(device->domain, "local.") &&
_cups_strcasecmp(device->domain, replyDomain))
{
/*
* Update the .local listing to use the "global" domain name instead.
* The backend will try local lookups first, then the global domain name.
*/
free(device->domain);
device->domain = strdup(replyDomain);
#ifdef HAVE_DNSSD
DNSServiceConstructFullName(fullName, device->name, regtype,
replyDomain);
#else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName,
serviceName, regtype, replyDomain);
#endif /* HAVE_DNSSD */
free(device->fullName);
device->fullName = strdup(fullName);
}
return (device);
}
/*
* Yes, add the device...
*/
device = calloc(sizeof(cups_device_t), 1);
device->name = strdup(serviceName);
device->domain = strdup(replyDomain);
device->type = key.type;
device->priority = 50;
cupsArrayAdd(devices, device);
/*
* Set the "full name" of this service, which is used for queries...
*/
#ifdef HAVE_DNSSD
DNSServiceConstructFullName(fullName, serviceName, regtype, replyDomain);
#else /* HAVE_AVAHI */
avahi_service_name_join(fullName, kDNSServiceMaxDomainName, serviceName, regtype, replyDomain);
#endif /* HAVE_DNSSD */
device->fullName = strdup(fullName);
return (device);
}
开发者ID:zdohnal,项目名称:cups,代码行数:78,代码来源:dnssd.c
示例11: cups_create_localizations
//.........这里部分代码省略.........
}
httpGetHostname(http, http_hostname, sizeof(http_hostname));
if (!_cups_strcasecmp(http_hostname, hostname) &&
port == _httpAddrPort(http->hostaddr))
{
/*
* Use the same connection...
*/
http2 = http;
}
else
{
/*
* Connect to the alternate host...
*/
if (!strcmp(scheme, "https"))
encryption = HTTP_ENCRYPT_ALWAYS;
else
encryption = HTTP_ENCRYPT_IF_REQUESTED;
if ((http2 = httpConnectEncrypt(hostname, port, encryption)) == NULL)
{
DEBUG_printf(("4cups_create_localizations: Unable to connect to "
"%s:%d: %s", hostname, port, cupsLastErrorString()));
return;
}
}
/*
* Get a temporary file...
*/
if ((temp = cupsTempFile2(tempfile, sizeof(tempfile))) == NULL)
{
DEBUG_printf(("4cups_create_localizations: Unable to create temporary "
"file: %s", cupsLastErrorString()));
if (http2 != http)
httpClose(http2);
return;
}
status = cupsGetFd(http2, resource, cupsFileNumber(temp));
DEBUG_printf(("4cups_create_localizations: GET %s = %s", resource,
httpStatus(status)));
if (status == HTTP_OK)
{
/*
* Got the file, read it...
*/
char buffer[8192], /* Message buffer */
*id, /* ID string */
*str; /* Translated message */
_cups_message_t *m; /* Current message */
lseek(cupsFileNumber(temp), 0, SEEK_SET);
while (cups_read_strings(temp, buffer, sizeof(buffer), &id, &str))
{
if ((m = malloc(sizeof(_cups_message_t))) == NULL)
break;
m->id = strdup(id);
m->str = strdup(str);
if (m->id && m->str)
cupsArrayAdd(dinfo->localizations, m);
else
{
if (m->id)
free(m->id);
if (m->str)
free(m->str);
free(m);
break;
}
}
}
DEBUG_printf(("4cups_create_localizations: %d messages loaded.",
cupsArrayCount(dinfo->localizations)));
/*
* Cleanup...
*/
unlink(tempfile);
cupsFileClose(temp);
if (http2 != http)
httpClose(http2);
}
开发者ID:thangap,项目名称:tizen-release,代码行数:101,代码来源:dest-localization.c
示例12: helpLoadIndex
//.........这里部分代码省略.........
if (!anchor)
{
/*
* Get section...
*/
if (*ptr != '\"')
break;
ptr ++;
sectptr = ptr;
while (*ptr && *ptr != '\"')
ptr ++;
if (*ptr != '\"')
break;
*ptr++ = '\0';
strlcpy(section, sectptr, sizeof(section));
while (isspace(*ptr & 255))
ptr ++;
}
if (*ptr != '\"')
break;
ptr ++;
text = ptr;
while (*ptr && *ptr != '\"')
ptr ++;
if (*ptr != '\"')
break;
*ptr++ = '\0';
if ((node = help_new_node(filename, anchor, section, text,
mtime, offset, length)) == NULL)
break;
node->score = -1;
cupsArrayAdd(hi->nodes, node);
}
}
}
cupsFileClose(fp);
}
/*
* Scan for new/updated files...
*/
update = help_load_directory(hi, directory, NULL);
/*
* Remove any files that are no longer installed...
*/
for (node = (help_node_t *)cupsArrayFirst(hi->nodes);
node;
node = (help_node_t *)cupsArrayNext(hi->nodes))
if (node->score < 0)
{
/*
* Delete this node...
*/
cupsArrayRemove(hi->nodes, node);
help_delete_node(node);
}
/*
* Add nodes to the sorted array...
*/
for (node = (help_node_t *)cupsArrayFirst(hi->nodes);
node;
node = (help_node_t *)cupsArrayNext(hi->nodes))
cupsArrayAdd(hi->sorted, node);
/*
* Save the index if we updated it...
*/
if (update)
helpSaveIndex(hi, hifile);
/*
* Return the index...
*/
return (hi);
}
开发者ID:josephgbr,项目名称:cups-pt_BR,代码行数:101,代码来源:help-index.c
示例13: main
int /* O - Exit status */
main(int argc, /* I - Number of command-line arguments */
char *argv[]) /* I - Command-line arguments */
{
int i; /* Looping var */
cups_array_t *array, /* Test array */
*dup_array; /* Duplicate array */
int status; /* Exit status */
char *text; /* Text from array */
char word[256]; /* Word from file */
double start, /* Start time */
end; /* End time */
cups_dir_t *dir; /* Current directory */
cups_dentry_t *dent; /* Directory entry */
char *saved[32]; /* Saved entries */
void *data; /* User data for arrays */
/*
* No errors so far...
*/
status = 0;
/*
* cupsArrayNew()
*/
fputs("cupsArrayNew: ", stdout);
data = (void *)"testarray";
array = cupsArrayNew((cups_array_func_t)strcmp, data);
if (array)
puts("PASS");
else
{
puts("FAIL (returned NULL, expected pointer)");
status ++;
}
/*
* cupsArrayUserData()
*/
fputs("cupsArrayUserData: ", stdout);
if (cupsArrayUserData(array) == data)
puts("PASS");
else
{
printf("FAIL (returned %p instead of %p!)\n", cupsArrayUserData(array),
data);
status ++;
}
/*
* cupsArrayAdd()
*/
fputs("cupsArrayAdd: ", stdout);
if (!cupsArrayAdd(array, strdup("One Fish")))
{
puts("FAIL (\"One Fish\")");
status ++;
}
else
{
if (!cupsArrayAdd(array, strdup("Two Fish")))
{
puts("FAIL (\"Two Fish\")");
status ++;
}
else
{
if (!cupsArrayAdd(array, strdup("Red Fish")))
{
puts("FAIL (\"Red Fish\")");
status ++;
}
else
{
if (!cupsArrayAdd(array, strdup("Blue Fish")))
{
puts("FAIL (\"Blue Fish\")");
status ++;
}
else
puts("PASS");
}
}
}
/*
* cupsArrayCount()
*/
fputs("cupsArrayCount: ", stdout);
if (cupsArrayCount(array) == 4)
puts("PASS");
//.........这里部分代码省略.........
开发者ID:jianglei12138,项目名称:ghostscript,代码行数:101,代码来源:testarray.c
示例14: cupsdAddSubscription
//.........这里部分代码省略.........
cupsArrayCount(Subscriptions));
return (NULL);
}
if (MaxSubscriptionsPerJob > 0 && job)
{
int count; /* Number of job subscriptions */
for (temp = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions),
count = 0;
temp;
temp = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
if (temp->job == job)
count ++;
if (count >= MaxSubscriptionsPerJob)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"cupsdAddSubscription: Reached MaxSubscriptionsPerJob %d "
"for job #%d (count=%d)", MaxSubscriptionsPerJob,
job->id, count);
return (NULL);
}
}
if (MaxSubscriptionsPerPrinter > 0 && dest)
{
int count; /* Number of printer subscriptions */
for (temp = (cupsd_subscription_t *)cupsArrayFirst(Subscriptions),
count = 0;
temp;
temp = (cupsd_subscription_t *)cupsArrayNext(Subscriptions))
if (temp->dest == dest)
count ++;
if (count >= MaxSubscriptionsPerPrinter)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"cupsdAddSubscription: Reached "
"MaxSubscriptionsPerPrinter %d for %s (count=%d)",
MaxSubscriptionsPerPrinter, dest->name, count);
return (NULL);
}
}
/*
* Allocate memory for this subscription...
*/
if ((temp = calloc(1, sizeof(cupsd_subscription_t))) == NULL)
{
cupsdLogMessage(CUPSD_LOG_CRIT,
"Unable to allocate memory for subscription object - %s",
strerror(errno));
return (NULL);
}
/*
* Fill in common data...
*/
if (sub_id)
{
temp->id = sub_id;
if (sub_id >= NextSubscriptionId)
NextSubscriptionId = sub_id + 1;
}
else
{
temp->id = NextSubscriptionId;
NextSubscriptionId ++;
}
temp->mask = mask;
temp->dest = dest;
temp->job = job;
temp->pipe = -1;
temp->first_event_id = 1;
temp->next_event_id = 1;
cupsdSetString(&(temp->recipient), uri);
/*
* Add the subscription to the array...
*/
cupsArrayAdd(Subscriptions, temp);
/*
* For RSS subscriptions, run the notifier immediately...
*/
if (uri && !strncmp(uri, "rss:", 4))
cupsd_start_notifier(temp);
return (temp);
}
开发者ID:aosm,项目名称:cups,代码行数:101,代码来源:subscriptions.c
示例15: cupsd_send_notification
static void
cupsd_send_notification(
cupsd_subscription_t *sub, /* I - Subscription object */
cupsd_event_t *event) /* I - Event to send */
{
ipp_state_t state; /* IPP event state */
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"cupsd_send_notification(sub=%p(%d), event=%p(%s))",
sub, sub->id, event, cupsdEventName(event->event));
/*
* Allocate the events array as needed...
*/
if (!sub->events)
{
sub->events = cupsArrayNew3((cups_array_func_t)NULL, NULL,
(cups_ahash_func_t)NULL, 0,
(cups_acopy_func_t)NULL,
(cups_afree_func_t)cupsd_delete_event);
if (!sub->events)
{
cupsdLogMessage(CUPSD_LOG_CRIT,
"Unable to allocate memory for subscription #%d!",
sub->id);
return;
}
}
/*
* Purge an old event as needed...
*/
if (cupsArrayCount(sub->events) >= MaxEvents)
{
/*
* Purge the oldest event in the cache...
*/
cupsArrayRemove(sub->events, cupsArrayFirst(sub->events));
sub->first_event_id ++;
}
/*
* Add the event to the subscription. Since the events array is
* always MaxEvents in length, and since we will have already
* removed an event from the subscription cache if we hit the
* event cache limit, we don't need to check for overflow here...
*/
cupsArrayAdd(sub->events, event);
/*
* Deliver the event...
*/
if (sub->recipient)
{
for (;;)
{
if (sub->pipe < 0)
cupsd_start_notifier(sub);
cupsdLogMessage(CUPSD_LOG_DEBUG2, "sub->pipe=%d", sub->pipe);
if (sub->pipe < 0)
break;
event->attrs->state = IPP_IDLE;
while ((state = ippWriteFile(sub->pipe, event->attrs)) != IPP_DATA)
if (state == IPP_ERROR)
break;
if (state == IPP_ERROR)
{
if (errno == EPIPE)
{
/*
* Notifier died, try restarting it...
*/
cupsdLogMessage(CUPSD_LOG_WARN,
"Notifier for subscription %d (%s) went away, "
"retrying!",
sub->id, sub->recipient);
cupsdEndProcess(sub->pid, 0);
close(sub->pipe);
sub->pipe = -1;
continue;
}
cupsdLogMessage(CUPSD_LOG_ERROR,
"Unable to send event for subscription %d (%s)!",
sub->id, sub->recipient);
//.........这里部分代码省略.........
开发者ID:aosm,项目名称:cups,代码行数:101,代码来源:subscriptions.c
示例16: _cupsStrAlloc
char * /* O - String pointer */
_cupsStrAlloc(const char *s) /* I - String */
{
size_t slen; /* Length of string */
_cups_sp_item_t *item, /* String pool item */
*key; /* Search key */
/*
* Range check input...
*/
if (!s)
return (NULL);
/*
* Get the string pool...
*/
_cupsMutexLock(&sp_mutex);
if (!stringpool)
stringpool = cupsArrayNew((cups_array_func_t)compare_sp_items, NULL);
if (!stringpool)
{
_cupsMutexUnlock(&sp_mutex);
return (NULL);
}
/*
* See if the string is already in the pool...
*/
key = (_cups_sp_item_t *)(s - offsetof(_cups_sp_item_t, str));
if ((item = (_cups_sp_item_t *)cupsArrayFind(stringpool, key)) != NULL)
{
/*
* Found it, return the cached string...
*/
item->ref_count ++;
#ifdef DEBUG_GUARDS
DEBUG_printf(("5_cupsStrAlloc: Using string %p(%s) for \"%s\", guard=%08x, "
"ref_count=%d", item, item->str, s, item->guard,
item->ref_count));
if (item->guard != _CUPS_STR_GUARD)
abort();
#endif /* DEBUG_GUARDS */
_cupsMutexUnlock(&sp_mutex);
return (item->str);
}
/*
* Not found, so allocate a new one...
*/
slen = strlen(s);
item = (_cups_sp_item_t *)calloc(1, sizeof(_cups_sp_item_t) + slen);
if (!item)
{
_cupsMutexUnlock(&sp_mutex);
return (NULL);
}
item->ref_count = 1;
memcpy(item->str, s, slen + 1);
#ifdef DEBUG_GUARDS
item->guard = _CUPS_STR_GUARD;
DEBUG_printf(("5_cupsStrAlloc: Created string %p(%s) for \"%s\", guard=%08x, "
"ref_count=%d", item, item->str, s, item->guard,
item->ref_count));
#endif /* DEBUG_GUARDS */
/*
* Add the string to the pool and return it...
*/
cupsArrayAdd(stringpool, item);
_cupsMutexUnlock(&sp_mutex);
return (item->str);
}
开发者ID:AndychenCL,项目名称:cups,代码行数:93,代码来源:string.c
示例17: colord_create_profile
static void
colord_create_profile(
cups_array_t *profiles, /* I - Profiles array */
const char *printer_name, /* I - Printer name */
const char *qualifier, /* I - Profile qualifier */
const char *colorspace, /* I - Profile colorspace */
char **format, /* I - Profile qualifier format */
const char *iccfile, /* I - ICC filename */
const char *scope) /* I - The scope of the profile, e.g.
'normal', 'temp' or 'disk' */
{
DBusMessage *message = NULL; /* D-Bus request */
DBusMessage *reply = NULL; /* D-Bus reply */
DBusMessageIter args; /* D-Bus method arguments */
DBusMessageIter dict; /* D-Bus method arguments */
DBusError error; /* D-Bus error */
char *idstr; /* Profile ID string */
size_t idstrlen; /* Profile ID allocated length */
const char *profile_path; /* Device object path */
char format_str[1024]; /* Qualifier format as a string */
/*
* Create the profile...
*/
message = dbus_message_new_method_call(COLORD_DBUS_SERVICE,
COLORD_DBUS_PATH,
COLORD_DBUS_INTERFACE,
"CreateProfile");
idstrlen = strlen(printer_name) + 1 + strlen(qualifier) + 1;
if ((idstr = malloc(idstrlen)) == NULL)
goto out;
snprintf(idstr, idstrlen, "%s-%s", printer_name, qualifier);
cupsdLogMessage(CUPSD_LOG_DEBUG, "Using profile ID \"%s\".", idstr);
dbus_message_iter_init_append(message, &args);
dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &idstr);
dbus_message_iter_append_basic(&args, DBUS_TYPE_STRING, &scope);
snprintf(format_str, sizeof(format_str), "%s.%s.%s", format[0], format[1],
format[2]);
dbus_message_iter_open_container(&args, DBUS_TYPE_ARRAY, "{ss}", &dict);
colord_dict_add_strings(&dict, "Qualifier", qualifier);
colord_dict_add_strings(&dict, "Format", format_str);
colord_dict_add_strings(&dict, "Colorspace", colorspace);
if (iccfile)
colord_dict_add_strings(&dict, "Filename", iccfile);
dbus_message_iter_close_container(&args, &dict);
/*
* Send the CreateProfile request synchronously...
*/
dbus_error_init(&error);
cupsdLogMessage(CUPSD_LOG_DEBUG, "Calling CreateProfile(%s,%s)", idstr,
scope);
reply = dbus_connection_send_with_reply_and_block(colord_con, message,
COLORD_DBUS_TIMEOUT,
&error);
if (!reply)
{
cupsdLogMessage(CUPSD_LOG_WARN, "CreateProfile failed: %s:%s", error.name,
error.message);
dbus_error_free(&error);
goto out;
}
/*
* Get reply data...
*/
dbus_message_iter_init(reply, &args);
if (dbus_message_iter_get_arg_type(&args) != DBUS_TYPE_OBJECT_PATH)
{
cupsdLogMessage(CUPSD_LOG_WARN,
"CreateProfile failed: Incorrect reply type.");
goto out;
}
dbus_message_iter_get_basic(&args, &profile_path);
cupsdLogMessage(CUPSD_LOG_DEBUG, "Created profile \"%s\".", profile_path);
cupsArrayAdd(profiles, strdup(profile_path));
out:
if (message)
dbus_message_unref(message);
if (reply)
dbus_message_unref(reply);
if (idstr)
free(idstr);
}
开发者ID:Cacauu,项目名称:cups,代码行数:97,代码来源:colorman.c
示例18: _cupsArrayAddStrings
int /* O - 1 on success, 0 on failure */
_cupsArrayAddStrings(cups_array_t *a, /* I - Array */
const char *s, /* I - Delimited strings or NULL */
char delim)/* I - Delimiter character */
{
char *buffer, /* Copy of string */
*start, /* Start of string */
*end; /* End of string */
int status = 1; /* Status of add */
DEBUG_printf(("_cupsArrayAddStrings(a=%p, s=\"%s\", delim='%c')", a, s,
delim));
if (!a || !s || !*s)
{
DEBUG_puts("1_cupsArrayAddStrings: Returning 0");
return (0);
}
if (delim == ' ')
{
/*
* Skip leading whitespace...
*/
DEBUG_puts("1_cupsArrayAddStrings: Skipping leading whitespace.");
while (*s && isspace(*s & 255))
s ++;
DEBUG_printf(("1_cupsArrayAddStrings: Remaining string \"%s\".", s));
}
if (!strchr(s, delim) &&
(delim != ' ' || (!strchr(s, '\t') && !strchr(s, '\n'))))
{
/*
* String doesn't contain a delimiter, so add it as a single value...
*/
DEBUG_puts("1_cupsArrayAddStrings: No delimiter seen, adding a single "
"value.");
if (!cupsArrayFind(a, (void *)s))
status = cupsArrayAdd(a, (void *)s);
}
else if ((buffer = strdup(s)) == NULL)
{
DEBUG_puts("1_cupsArrayAddStrings: Unable to duplicate string.");
status = 0;
}
else
{
for (start = end = buffer; *end; start = end)
{
/*
* Find the end of the current delimited string and see if we need to add
* it...
*/
if (delim == ' ')
{
while (*end && !isspace(*end & 255))
end ++;
while (*end && isspace(*end & 255))
*end++ = '\0';
}
else if ((end = strchr(start, delim)) != NULL)
*end++ = '\0';
else
end = start + strlen(start);
DEBUG_printf(("1_cupsArrayAddStrings: Adding \"%s\", end=\"%s\"", start,
end));
if (!cupsArrayFind(a, start))
status &= cupsArrayAdd(a, start);
}
free(buffer);
}
DEBUG_printf(("1_cupsArrayAddStrings: Returning %d.", status));
return (status);
}
开发者ID:Cacauu,项目名称:cups,代码行数:87,代码来源:array.c
示例19: cupsdStartProcess
//.........这里部分代码省略.........
*/
if (!RunUser && setgid(Group))
exit(errno + 100);
if (!RunUser && setgroups(1, &Group))
exit(errno + 100);
/*
* Change user to something "safe"...
*/
if (!RunUser && user && setuid(user))
exit(errno + 100);
/*
* Change umask to restrict permissions on created files...
*/
umask(077);
/*
* Unblock signals before doing the exec...
*/
# ifdef HAVE_SIGSET
sigset(SIGTERM, SIG_DFL);
sigset(SIGCHLD, SIG_DFL);
sigset(SIGPIPE, SIG_DFL);
# elif defined(HAVE_SIGACTION)
memset(&action, 0, sizeof(action));
sigemptyset(&action.sa_mask);
action.sa_handler = SIG_DFL;
sigaction(SIGTERM, &action, NULL);
sigaction(SIGCHLD, &action, NULL);
sigaction(SIGPIPE, &action, NULL);
# else
signal(SIGTERM, SIG_DFL);
signal(SIGCHLD, SIG_DFL);
signal(SIGPIPE, SIG_DFL);
# endif /* HAVE_SIGSET */
cupsdReleaseSignals();
/*
* Execute the command; if for some reason this doesn't work, log an error
* exit with a non-zero value...
*/
if (envp)
execve(exec_path, argv, envp);
else
execv(exec_path, argv);
exit(errno + 100);
}
else if (*pid < 0)
{
/*
* Error - couldn't fork a new process!
*/
cupsdLogMessage(CUPSD_LOG_ERROR, "Unable to fork %s - %s.", command,
strerror(errno));
*pid = 0;
}
cupsdReleaseSignals();
#endif /* USE_POSIX_SPAWN */
if (*pid)
{
if (!process_array)
process_array = cupsArrayNew((cups_array_func_t)compare_procs, NULL);
if (process_array)
{
if ((proc = calloc(1, sizeof(cupsd_proc_t) + strlen(command))) != NULL)
{
proc->pid = *pid;
proc->job_id = job ? job->id : 0;
_cups_strcpy(proc->name, command);
cupsArrayAdd(process_array, proc);
}
}
}
cupsdLogMessage(CUPSD_LOG_DEBUG2,
"cupsdStartProcess(command=\"%s\", argv=%p, envp=%p, "
"infd=%d, outfd=%d, errfd=%d, backfd=%d, sidefd=%d, root=%d, "
"profile=%p, job=%p(%d), pid=%p) = %d",
command, argv, envp, infd, outfd, errfd, backfd, sidefd,
root, profile, job, job ? job->id : 0, pid, *pid);
return (*pid);
}
开发者ID:Cacauu,项目名称:cups,代码行数:101,代码来源:process.c
示例20: launchd_checkin
//.........这里部分代码省略.........
if ((ld_sockets = launch_data_dict_lookup(ld_resp, LAUNCH_JOBKEY_SOCKETS))
== NULL)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"launchd_checkin: No sockets found to answer requests on!");
exit(EXIT_FAILURE);
return; /* anti-compiler-warning */
}
/*
* Get the array of listener sockets...
*/
if ((ld_array = launch_data_dict_lookup(ld_sockets, "Listeners")) == NULL)
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"launchd_checkin: No sockets found to answer requests on!");
exit(EXIT_FAILURE);
return; /* anti-compiler-warning */
}
/*
* Add listening fd(s) to the Listener array...
*/
if (launch_data_get_type(ld_array) == LAUNCH_DATA_ARRAY)
{
count = launch_data_array_get_count(ld_array);
for (i = 0; i < count; i ++)
{
/*
* Get the launchd file descriptor and address...
*/
if ((tmp = launch_data_array_get_index(ld_array, i)) != NULL)
{
fd = launch_data_get_fd(tmp);
addrlen = sizeof(addr);
if (getsockname(fd, (struct sockaddr *)&addr, &addrlen))
{
cupsdLogMessage(CUPSD_LOG_ERROR,
"launchd_checkin: Unable to get local address - %s",
strerror(errno));
continue;
}
/*
* Try to match the launchd socket address to one of the listeners...
*/
for (lis = (cupsd_listener_t *)cupsArrayFirst(Listeners);
lis;
lis = (cupsd_listener_t *)cupsArrayNext(Listeners))
if (httpAddrEqual(&lis->address, &addr))
break;
/*
* Add a new listener If there's no match...
*/
if (lis)
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"launchd_checkin: Matched existing listener %s with fd %d...",
httpAddrString(&(lis->address), s, sizeof(s)), fd);
}
else
{
cupsdLogMessage(CUPSD_LOG_DEBUG,
"launchd_checkin: Adding new listener %s with fd %d...",
httpAddrString(&addr, s, sizeof(s)), fd);
|
请发表评论