355b4669e025ff377602b6fc7caaf30dbc218371jacobs/*
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * CDDL HEADER START
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * The contents of this file are subject to the terms of the
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * Common Development and Distribution License (the "License").
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * You may not use this file except in compliance with the License.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * or http://www.opensolaris.org/os/licensing.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * See the License for the specific language governing permissions
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * and limitations under the License.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * When distributing Covered Code, include this CDDL HEADER in each
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * If applicable, add the following below this CDDL HEADER, with the
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * fields enclosed by brackets "[]" replaced with your own identifying
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * information: Portions Copyright [yyyy] [name of copyright owner]
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * CDDL HEADER END
355b4669e025ff377602b6fc7caaf30dbc218371jacobs */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs/*
edafac1f8203a7de1490688213c118b03215c89dKeerthi Kondaka * Copyright 2010 Sun Microsystems, Inc. All rights reserved.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * Use is subject to license terms.
355b4669e025ff377602b6fc7caaf30dbc218371jacobs */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
179184d3e9bc6ab146407a62a8461338687b1908jacobs/* $Id: job.c 179 2006-07-17 18:24:07Z njacobs $ */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <stdlib.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <stdio.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <string.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <errno.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <unistd.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <limits.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <libintl.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <sys/types.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <sys/stat.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <fcntl.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <papi_impl.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs#include <uri.h>
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs/*
355b4669e025ff377602b6fc7caaf30dbc218371jacobs * must copy files before leaving routine
355b4669e025ff377602b6fc7caaf30dbc218371jacobs */
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobSubmit(papi_service_t handle, char *name, papi_attribute_t **attributes,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_job_ticket_t *job_ticket, char **files, papi_job_t *job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *metadata = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (name == NULL) || (files == NULL) ||
355b4669e025ff377602b6fc7caaf30dbc218371jacobs (job == NULL))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (job_ticket != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs detailed_error(svc,
54f1e6d0c65afabe949aadb54f842af6603508deceastha gettext("papiJobSubmit: job ticket not supported"));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_OPERATION_NOT_SUPPORTED);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((status = service_fill_in(svc, name)) != PAPI_OK)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((*job = j = (job_t *)calloc(1, sizeof (*j))) == NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs detailed_error(svc,
54f1e6d0c65afabe949aadb54f842af6603508deceastha gettext("calloc() failed"));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_TEMPORARY_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
e3ccc2c3c4b8b02e2eee9fd88d847ab967376b0bsonam gupta - Sun Microsystems - Bangalore India /* before creating a control file add the job-name */
e3ccc2c3c4b8b02e2eee9fd88d847ab967376b0bsonam gupta - Sun Microsystems - Bangalore India if ((files != NULL) && (files[0] != NULL))
e3ccc2c3c4b8b02e2eee9fd88d847ab967376b0bsonam gupta - Sun Microsystems - Bangalore India papiAttributeListAddString(&attributes, PAPI_ATTR_EXCL,
e3ccc2c3c4b8b02e2eee9fd88d847ab967376b0bsonam gupta - Sun Microsystems - Bangalore India "job-name", files[0]);
e3ccc2c3c4b8b02e2eee9fd88d847ab967376b0bsonam gupta - Sun Microsystems - Bangalore India
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* create a control file */
54f1e6d0c65afabe949aadb54f842af6603508deceastha (void) lpd_job_add_attributes(svc, attributes, &metadata,
54f1e6d0c65afabe949aadb54f842af6603508deceastha &j->attributes);
54f1e6d0c65afabe949aadb54f842af6603508deceastha
54f1e6d0c65afabe949aadb54f842af6603508deceastha if ((status = lpd_job_add_files(svc, attributes, files, &metadata,
54f1e6d0c65afabe949aadb54f842af6603508deceastha &j->attributes)) != PAPI_OK) {
54f1e6d0c65afabe949aadb54f842af6603508deceastha return (status);
54f1e6d0c65afabe949aadb54f842af6603508deceastha }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* send the job to the server */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = lpd_submit_job(svc, metadata, &j->attributes, NULL);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs free(metadata);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobSubmitByReference(papi_service_t handle, char *name,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_attribute_t **job_attributes,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_job_ticket_t *job_ticket, char **files, papi_job_t *job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (papiJobSubmit(handle, name, job_attributes,
54f1e6d0c65afabe949aadb54f842af6603508deceastha job_ticket, files, job));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobStreamOpen(papi_service_t handle, char *name,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_attribute_t **attributes,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_job_ticket_t *job_ticket, papi_stream_t *stream)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *metadata = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs stream_t *s = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (name == NULL) || (stream == NULL))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (job_ticket != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_OPERATION_NOT_SUPPORTED);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((status = service_fill_in(svc, name)) != PAPI_OK)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* create the stream container */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((*stream = s = calloc(1, sizeof (*s))) == NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_TEMPORARY_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* create the job */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((s->job = calloc(1, sizeof (*(s->job)))) == NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_TEMPORARY_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
edafac1f8203a7de1490688213c118b03215c89dKeerthi Kondaka papiAttributeListAddString(&attributes, PAPI_ATTR_EXCL,
edafac1f8203a7de1490688213c118b03215c89dKeerthi Kondaka "job-name", "standard input");
edafac1f8203a7de1490688213c118b03215c89dKeerthi Kondaka
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* process the attribute list */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs lpd_job_add_attributes(svc, attributes, &metadata, &s->job->attributes);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs /* if we can stream, do it */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc->uri->fragment != NULL) &&
355b4669e025ff377602b6fc7caaf30dbc218371jacobs (strcasecmp(svc->uri->fragment, "streaming") == 0)) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *files[] = { "standard input", NULL };
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs lpd_job_add_files(svc, attributes, files, &metadata,
54f1e6d0c65afabe949aadb54f842af6603508deceastha &(s->job->attributes));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = lpd_submit_job(svc, metadata, &(s->job->attributes),
54f1e6d0c65afabe949aadb54f842af6603508deceastha &s->fd);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs } else {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char dfname[18];
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka char buf[256];
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs strcpy(dfname, "/tmp/stdin-XXXXX");
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((s->fd = mkstemp(dfname)) >= 0)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs s->dfname = strdup(dfname);
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka if (s->job->attributes)
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka papiAttributeListFree(s->job->attributes);
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka s->job->attributes = NULL;
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka papiAttributeListToString(attributes, " ", buf, sizeof (buf));
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka papiAttributeListFromString(&(s->job->attributes),
37c30c18a30adf1c89f3e563208e93e6c7501dedKeerthi Kondaka PAPI_ATTR_APPEND, buf);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs s->metadata = metadata;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobStreamWrite(papi_service_t handle, papi_stream_t stream,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs void *buffer, size_t buflen)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs stream_t *s = stream;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (stream == NULL) || (buffer == NULL) ||
355b4669e025ff377602b6fc7caaf30dbc218371jacobs (buflen == 0))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (write(s->fd, buffer, buflen) != buflen)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_DEVICE_ERROR);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_OK);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobStreamClose(papi_service_t handle, papi_stream_t stream, papi_job_t *job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_INTERNAL_ERROR;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs stream_t *s = stream;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int ret;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (stream == NULL) || (job == NULL))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs close(s->fd); /* close the stream */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (s->dfname != NULL) { /* if it is a tmpfile, print it */
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *files[2];
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs files[0] = s->dfname;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs files[1] = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs lpd_job_add_files(svc, s->job->attributes, files, &s->metadata,
54f1e6d0c65afabe949aadb54f842af6603508deceastha &(s->job->attributes));
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = lpd_submit_job(svc, s->metadata,
54f1e6d0c65afabe949aadb54f842af6603508deceastha &(s->job->attributes), NULL);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs unlink(s->dfname);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs free(s->dfname);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs } else
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (s->metadata != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs free(s->metadata);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs *job = s->job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobQuery(papi_service_t handle, char *name, int32_t job_id,
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char **job_attributes, papi_job_t *job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status = PAPI_OK;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (name == NULL) || job_id < 0)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((status = service_fill_in(svc, name)) == PAPI_OK)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = lpd_find_job_info(svc, job_id, (job_t **)job);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_status_t
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobCancel(papi_service_t handle, char *name, int32_t job_id)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papi_status_t status;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs service_t *svc = handle;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((svc == NULL) || (name == NULL) || (job_id < 0))
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (PAPI_BAD_ARGUMENT);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if ((status = service_fill_in(svc, name)) == PAPI_OK)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs status = lpd_cancel_job(svc, job_id);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (status);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapi_attribute_t **
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobGetAttributeList(papi_job_t job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = (job_t *)job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (j != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return ((papi_attribute_t **)j->attributes);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (NULL);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobschar *
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobGetPrinterName(papi_job_t job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs char *result = NULL;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = (job_t *)job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (j != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListGetString(j->attributes, NULL,
54f1e6d0c65afabe949aadb54f842af6603508deceastha "printer-name", &result);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (result);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsint
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobGetId(papi_job_t job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int result = -1;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = (job_t *)job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (j != NULL)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListGetInteger(j->attributes, NULL,
54f1e6d0c65afabe949aadb54f842af6603508deceastha "job-id", &result);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs return (result);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsvoid
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobFree(papi_job_t job)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs job_t *j = (job_t *)job;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (j != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiAttributeListFree(j->attributes);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs free(j);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobsvoid
355b4669e025ff377602b6fc7caaf30dbc218371jacobspapiJobListFree(papi_job_t *jobs)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs{
355b4669e025ff377602b6fc7caaf30dbc218371jacobs if (jobs != NULL) {
355b4669e025ff377602b6fc7caaf30dbc218371jacobs int i;
355b4669e025ff377602b6fc7caaf30dbc218371jacobs
355b4669e025ff377602b6fc7caaf30dbc218371jacobs for (i = 0; jobs[i] != NULL; i++)
355b4669e025ff377602b6fc7caaf30dbc218371jacobs papiJobFree(jobs[i]);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs free(jobs);
355b4669e025ff377602b6fc7caaf30dbc218371jacobs }
355b4669e025ff377602b6fc7caaf30dbc218371jacobs}