merge XFree86 4.3.0.1 to -CURRENT
This commit is contained in:
@@ -44,26 +44,30 @@ copyright holders.
|
||||
** *********************************************************
|
||||
**
|
||||
********************************************************************/
|
||||
/* $XFree86: xc/programs/Xserver/Xprint/attributes.c,v 1.18 2002/05/31 18:45:53 dawes Exp $ */
|
||||
|
||||
#include <Xproto.h>
|
||||
#include <X11/Xproto.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/wait.h>
|
||||
#include <pwd.h>
|
||||
#if defined(sun) && defined(SVR4)
|
||||
#include <wchar.h>
|
||||
#endif
|
||||
|
||||
#include <scrnintstr.h>
|
||||
#include "scrnintstr.h"
|
||||
|
||||
#define _XP_PRINT_SERVER_
|
||||
#include "extensions/Printstr.h"
|
||||
#undef _XP_PRINT_SERVER_
|
||||
#include <X11/extensions/Printstr.h>
|
||||
|
||||
#include "attributes.h"
|
||||
#include "Xrm.c"
|
||||
|
||||
static XrmDatabase CopyDb(XrmDatabase inDb);
|
||||
|
||||
extern XrmDatabase XpSpoolerGetServerAttributes();
|
||||
extern XrmDatabase XpSpoolerGetServerAttributes(void);
|
||||
|
||||
static int attrGeneration = 0;
|
||||
static unsigned long attrGeneration = 0;
|
||||
|
||||
typedef struct {
|
||||
XrmDatabase *pDb;
|
||||
@@ -137,8 +141,7 @@ static char NULL_STRING[] = "\0";
|
||||
* $LANG. It makes no attempt to ensure that the directory actually exists.
|
||||
*/
|
||||
char *
|
||||
XpGetConfigDir(useLocale)
|
||||
Bool useLocale;
|
||||
XpGetConfigDir(Bool useLocale)
|
||||
{
|
||||
char *dirName, *langName, *langDir, *configDir;
|
||||
Bool freeLangDir = False;
|
||||
@@ -182,8 +185,7 @@ XpGetConfigDir(useLocale)
|
||||
* locale (if other than the top-level).
|
||||
*/
|
||||
static XrmDatabase
|
||||
GetMergedDatabase(attrName)
|
||||
char *attrName;
|
||||
GetMergedDatabase(const char *attrName)
|
||||
{
|
||||
char *dirName, *fileName;
|
||||
XrmDatabase db;
|
||||
@@ -220,7 +222,7 @@ GetMergedDatabase(attrName)
|
||||
* the context.
|
||||
*/
|
||||
static void
|
||||
BuildSystemAttributes()
|
||||
BuildSystemAttributes(void)
|
||||
{
|
||||
if(systemAttributes.printers != (XrmDatabase)NULL)
|
||||
XrmDestroyDatabase(systemAttributes.printers);
|
||||
@@ -243,13 +245,13 @@ BuildSystemAttributes()
|
||||
* passed as the client_data (aka "closure").
|
||||
*/
|
||||
static Bool
|
||||
AddDbEntry(sourceDB, bindings, quarks, type, value, client_data)
|
||||
XrmDatabase *sourceDB;
|
||||
XrmBindingList bindings;
|
||||
XrmQuarkList quarks;
|
||||
XrmRepresentation *type;
|
||||
XrmValue *value;
|
||||
XPointer client_data;
|
||||
AddDbEntry(
|
||||
XrmDatabase *sourceDB,
|
||||
XrmBindingList bindings,
|
||||
XrmQuarkList quarks,
|
||||
XrmRepresentation *type,
|
||||
XrmValue *value,
|
||||
XPointer client_data)
|
||||
{
|
||||
DbEnumStruct *pEnumStruct = (DbEnumStruct *)client_data;
|
||||
XrmName xrm_name[5];
|
||||
@@ -293,15 +295,15 @@ AddDbEntry(sourceDB, bindings, quarks, type, value, client_data)
|
||||
* printer.
|
||||
*/
|
||||
static XrmDatabase
|
||||
BuildPrinterAttrs(printerName, qualifierName)
|
||||
char *printerName;
|
||||
char *qualifierName;
|
||||
BuildPrinterAttrs(
|
||||
char *printerName,
|
||||
char *qualifierName)
|
||||
{
|
||||
XrmDatabase printerDB = (XrmDatabase)NULL;
|
||||
|
||||
if(systemAttributes.printers != (XrmDatabase)NULL)
|
||||
{
|
||||
char *dirName, *fileName;
|
||||
char *fileName;
|
||||
XrmDatabase modelDB = (XrmDatabase)NULL;
|
||||
XrmName xrm_name[5], xrm_class[2];
|
||||
XrmRepresentation rep_type;
|
||||
@@ -374,10 +376,10 @@ BuildPrinterAttrs(printerName, qualifierName)
|
||||
* level doc and job databases.
|
||||
*/
|
||||
static XrmDatabase
|
||||
BuildABase(printerName, qualifierName, sourceBase)
|
||||
char *printerName;
|
||||
char *qualifierName;
|
||||
XrmDatabase sourceBase;
|
||||
BuildABase(
|
||||
char *printerName,
|
||||
char *qualifierName,
|
||||
XrmDatabase sourceBase)
|
||||
{
|
||||
XrmDatabase builtDB = (XrmDatabase)NULL;
|
||||
|
||||
@@ -425,7 +427,7 @@ BuildABase(printerName, qualifierName, sourceBase)
|
||||
* databases stored in the global attrList.
|
||||
*/
|
||||
static void
|
||||
FreeAttrList()
|
||||
FreeAttrList(void)
|
||||
{
|
||||
PrAttrPtr pAttr, pNext;
|
||||
|
||||
@@ -454,7 +456,7 @@ FreeAttrList()
|
||||
* by calling XpBuildAttributeStore for a new list of printers.
|
||||
*/
|
||||
int
|
||||
XpRehashAttributes()
|
||||
XpRehashAttributes(void)
|
||||
{
|
||||
if(attrList != (PrAttrPtr)NULL)
|
||||
FreeAttrList();
|
||||
@@ -468,9 +470,9 @@ XpRehashAttributes()
|
||||
* calls BuildSystemAttributes to create the system-level databases.
|
||||
*/
|
||||
void
|
||||
XpBuildAttributeStore(printerName, qualifierName)
|
||||
char *printerName;
|
||||
char *qualifierName;
|
||||
XpBuildAttributeStore(
|
||||
char *printerName,
|
||||
char *qualifierName)
|
||||
{
|
||||
PrAttrPtr pAttr;
|
||||
|
||||
@@ -510,13 +512,13 @@ XpBuildAttributeStore(printerName, qualifierName)
|
||||
|
||||
|
||||
static Bool
|
||||
StoreEntry(sourceDB, bindings, quarks, type, value, client_data)
|
||||
XrmDatabase *sourceDB;
|
||||
XrmBindingList bindings;
|
||||
XrmQuarkList quarks;
|
||||
XrmRepresentation *type;
|
||||
XrmValue *value;
|
||||
XPointer client_data;
|
||||
StoreEntry(
|
||||
XrmDatabase *sourceDB,
|
||||
XrmBindingList bindings,
|
||||
XrmQuarkList quarks,
|
||||
XrmRepresentation *type,
|
||||
XrmValue *value,
|
||||
XPointer client_data)
|
||||
{
|
||||
XrmDatabase *outDb = (XrmDatabase *)client_data;
|
||||
|
||||
@@ -530,8 +532,7 @@ StoreEntry(sourceDB, bindings, quarks, type, value, client_data)
|
||||
* the copy.
|
||||
*/
|
||||
static XrmDatabase
|
||||
CopyDb(inDb)
|
||||
XrmDatabase inDb;
|
||||
CopyDb(XrmDatabase inDb)
|
||||
{
|
||||
XrmDatabase outDb = (XrmDatabase)NULL;
|
||||
XrmQuark empty = NULLQUARK;
|
||||
@@ -547,8 +548,7 @@ CopyDb(inDb)
|
||||
* attributes databases for the printer associated with the context.
|
||||
*/
|
||||
void
|
||||
XpInitAttributes( pContext )
|
||||
XpContextPtr pContext;
|
||||
XpInitAttributes(XpContextPtr pContext)
|
||||
{
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
PrAttrPtr pPrAttr = attrList;
|
||||
@@ -569,8 +569,8 @@ XpInitAttributes( pContext )
|
||||
}
|
||||
|
||||
void
|
||||
XpDestroyAttributes( pContext )
|
||||
XpContextPtr pContext;
|
||||
XpDestroyAttributes(
|
||||
XpContextPtr pContext)
|
||||
{
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
|
||||
@@ -596,14 +596,13 @@ XpDestroyAttributes( pContext )
|
||||
* in which case the pContext parameter is ignored.
|
||||
*/
|
||||
char *
|
||||
XpGetOneAttribute( pContext, class, attributeName )
|
||||
XpContextPtr pContext;
|
||||
XPAttributes class;
|
||||
char *attributeName;
|
||||
XpGetOneAttribute(
|
||||
XpContextPtr pContext,
|
||||
XPAttributes class,
|
||||
char *attributeName)
|
||||
{
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
XrmDatabase db = (XrmDatabase)NULL;
|
||||
char *retVal;
|
||||
XrmName xrm_name[3];
|
||||
XrmRepresentation rep_type;
|
||||
XrmValue value;
|
||||
@@ -666,12 +665,11 @@ XpGetOneAttribute( pContext, class, attributeName )
|
||||
* function does not recognize XPServerAttr.
|
||||
*/
|
||||
void
|
||||
XpPutOneAttribute( pContext, class, attributeName, value )
|
||||
|
||||
XpContextPtr pContext;
|
||||
XPAttributes class;
|
||||
const char* attributeName;
|
||||
const char* value;
|
||||
XpPutOneAttribute(
|
||||
XpContextPtr pContext,
|
||||
XPAttributes class,
|
||||
const char* attributeName,
|
||||
const char* value)
|
||||
{
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
XrmDatabase db;
|
||||
@@ -720,8 +718,8 @@ const char* value;
|
||||
* struct to indicate the new amount of space available.
|
||||
*/
|
||||
static Bool
|
||||
ExpandSpace(pStr)
|
||||
StringDbStruct *pStr;
|
||||
ExpandSpace(
|
||||
StringDbStruct *pStr)
|
||||
{
|
||||
char *newSpace;
|
||||
|
||||
@@ -740,9 +738,9 @@ ExpandSpace(pStr)
|
||||
* are updated.
|
||||
*/
|
||||
static void
|
||||
PutString(pStr, pString)
|
||||
StringDbStruct *pStr;
|
||||
char *pString;
|
||||
PutString(
|
||||
StringDbStruct *pStr,
|
||||
char *pString)
|
||||
{
|
||||
int len = strlen(pString);
|
||||
|
||||
@@ -760,9 +758,9 @@ PutString(pStr, pString)
|
||||
* the byte, and the nextPos and space fields are updated.
|
||||
*/
|
||||
static void
|
||||
PutByte(pStr, byte)
|
||||
StringDbStruct *pStr;
|
||||
char byte;
|
||||
PutByte(
|
||||
StringDbStruct *pStr,
|
||||
char byte)
|
||||
{
|
||||
if(pStr->space <= 1)
|
||||
if(!ExpandSpace(pStr))
|
||||
@@ -782,13 +780,13 @@ PutByte(pStr, byte)
|
||||
* This code is based directly on that in "DumpEntry" in Xrm.c.
|
||||
*/
|
||||
static Bool
|
||||
AppendEntry(db, bindings, quarks, type, value, data)
|
||||
XrmDatabase *db;
|
||||
XrmBindingList bindings;
|
||||
XrmQuarkList quarks;
|
||||
XrmRepresentation *type;
|
||||
XrmValuePtr value;
|
||||
XPointer data;
|
||||
AppendEntry(
|
||||
XrmDatabase *db,
|
||||
XrmBindingList bindings,
|
||||
XrmQuarkList quarks,
|
||||
XrmRepresentation *type,
|
||||
XrmValuePtr value,
|
||||
XPointer data)
|
||||
{
|
||||
StringDbStruct *pEnumStr = (StringDbStruct *)data;
|
||||
Bool firstNameSeen;
|
||||
@@ -796,7 +794,7 @@ AppendEntry(db, bindings, quarks, type, value, data)
|
||||
char *s, c;
|
||||
|
||||
if (*type != XrmQString)
|
||||
return;
|
||||
return False;
|
||||
|
||||
for (firstNameSeen = False; *quarks; bindings++, quarks++) {
|
||||
if (*bindings == XrmBindLoosely) {
|
||||
@@ -849,13 +847,12 @@ AppendEntry(db, bindings, quarks, type, value, data)
|
||||
* unlike XpGetOneAttribute, where the caller must not free the string.
|
||||
*/
|
||||
char *
|
||||
XpGetAttributes( pContext, class )
|
||||
XpContextPtr pContext;
|
||||
XPAttributes class;
|
||||
XpGetAttributes(
|
||||
XpContextPtr pContext,
|
||||
XPAttributes class)
|
||||
{
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
XrmDatabase db = (XrmDatabase)NULL;
|
||||
char *retVal;
|
||||
StringDbStruct enumStruct;
|
||||
XrmQuark empty = NULLQUARK;
|
||||
|
||||
@@ -904,10 +901,10 @@ XpGetAttributes( pContext, class )
|
||||
}
|
||||
|
||||
int
|
||||
XpAugmentAttributes( pContext, class, attributes )
|
||||
XpContextPtr pContext;
|
||||
XPAttributes class;
|
||||
char *attributes;
|
||||
XpAugmentAttributes(
|
||||
XpContextPtr pContext,
|
||||
XPAttributes class,
|
||||
char *attributes)
|
||||
{
|
||||
XrmDatabase db;
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
@@ -940,10 +937,10 @@ XpAugmentAttributes( pContext, class, attributes )
|
||||
* XpSetAttributes - sets the attribute stores for a specified context.
|
||||
*/
|
||||
int
|
||||
XpSetAttributes( pContext, class, attributes )
|
||||
XpContextPtr pContext;
|
||||
XPAttributes class;
|
||||
char *attributes;
|
||||
XpSetAttributes(
|
||||
XpContextPtr pContext,
|
||||
XPAttributes class,
|
||||
char *attributes)
|
||||
{
|
||||
XrmDatabase db;
|
||||
ContextAttrPtr pCtxtAttrs;
|
||||
@@ -981,12 +978,11 @@ XpSetAttributes( pContext, class, attributes )
|
||||
}
|
||||
|
||||
void
|
||||
XpAddPrinterAttribute(printerName, printerQualifier, attributeName,
|
||||
attributeValue)
|
||||
char *printerName;
|
||||
char *printerQualifier;
|
||||
char *attributeName;
|
||||
char *attributeValue;
|
||||
XpAddPrinterAttribute(
|
||||
char *printerName,
|
||||
char *printerQualifier,
|
||||
char *attributeName,
|
||||
char *attributeValue)
|
||||
{
|
||||
PrAttrPtr pAttr;
|
||||
|
||||
@@ -1045,7 +1041,7 @@ static char serverAttrStr[] = "*document-attributes-supported: copy-count\n\
|
||||
*multiple-documents-supported: False";
|
||||
|
||||
XrmDatabase
|
||||
XpSpoolerGetServerAttributes()
|
||||
XpSpoolerGetServerAttributes(void)
|
||||
{
|
||||
char *totalAttrs, *localeName;
|
||||
XrmDatabase db;
|
||||
@@ -1064,34 +1060,6 @@ XpSpoolerGetServerAttributes()
|
||||
return db;
|
||||
}
|
||||
|
||||
/*
|
||||
* ExecuteCommand takes two pointers - the command to execute,
|
||||
* and the "argv" style NULL-terminated vector of arguments for the command.
|
||||
* We wait for the command to terminate before continuing to ensure that
|
||||
* we don't delete the job file before the spooler has made a copy.
|
||||
*/
|
||||
static void
|
||||
ExecCommand(pCommand, argVector)
|
||||
char *pCommand;
|
||||
char **argVector;
|
||||
{
|
||||
pid_t childPid;
|
||||
int status;
|
||||
|
||||
if((childPid = fork()) == 0)
|
||||
{
|
||||
/* return BadAlloc? */
|
||||
if (execv(pCommand, argVector) == -1) {
|
||||
FatalError("unable to exec '%s'", pCommand);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
(void) waitpid(childPid, &status, 0);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* SendFileToCommand takes three character pointers - the file name,
|
||||
* the command to execute,
|
||||
@@ -1167,8 +1135,6 @@ SendFileToCommand(
|
||||
}
|
||||
else
|
||||
{
|
||||
int res;
|
||||
|
||||
(void) close(pipefd[0]);
|
||||
|
||||
outPipe = fdopen(pipefd[1], "w");
|
||||
@@ -1188,7 +1154,6 @@ SendFileToCommand(
|
||||
* store for the supplied print context. The ReplaceAnyString utility
|
||||
* routine is used to perform the actual replacements.
|
||||
*/
|
||||
extern char *ReplaceAnyString(char *, char *, char *);
|
||||
|
||||
static char *
|
||||
ReplaceAllKeywords(
|
||||
@@ -1233,7 +1198,20 @@ ReplaceAllKeywords(
|
||||
return command;
|
||||
}
|
||||
|
||||
#if defined(CSRG_BASED) || defined(linux) || (defined(sun) && !defined(SVR4)) || (defined(SVR4) && !defined(sun) && !defined(USL))
|
||||
#ifdef __QNX__
|
||||
#define toascii( c ) ((unsigned)(c) & 0x007f)
|
||||
#endif
|
||||
|
||||
#if defined(CSRG_BASED) || \
|
||||
defined(linux) || \
|
||||
defined(__CYGWIN__) || \
|
||||
(defined(sun) && !defined(SVR4)) || \
|
||||
(defined(SVR4) && !defined(sun) && !defined(USL)) || \
|
||||
defined(__UNIXOS2__) || \
|
||||
defined(ISC) || \
|
||||
defined(Lynx) || \
|
||||
defined(__QNX__) || \
|
||||
defined(__DARWIN__)
|
||||
#define iswspace(c) (isascii(c) && isspace(toascii(c)))
|
||||
#endif
|
||||
|
||||
@@ -1387,8 +1365,8 @@ VectorizeCommand(
|
||||
char ***pVector,
|
||||
XpContextPtr pContext)
|
||||
{
|
||||
char *cmdName, *curTok;
|
||||
int i, numChars;
|
||||
char *cmdName;
|
||||
int numChars;
|
||||
|
||||
if(command == (char *)NULL)
|
||||
return (char *)NULL;
|
||||
@@ -1410,11 +1388,11 @@ static char DEFAULT_SPOOL_COMMAND[] = "/usr/bin/lp -d %printer-name% -n %copy-co
|
||||
#endif
|
||||
|
||||
int
|
||||
XpSubmitJob(fileName, pContext)
|
||||
char *fileName;
|
||||
XpContextPtr pContext;
|
||||
XpSubmitJob(
|
||||
char *fileName,
|
||||
XpContextPtr pContext)
|
||||
{
|
||||
char **vector, *cmdNam, *cmdOpt, *command, *userName;
|
||||
char **vector, *cmdNam, *command, *userName;
|
||||
int i;
|
||||
|
||||
command = XpGetOneAttribute(pContext, XPPrinterAttr, "xp-spooler-command");
|
||||
@@ -1452,6 +1430,7 @@ XpSubmitJob(fileName, pContext)
|
||||
|
||||
FreeVector(vector);
|
||||
xfree(cmdNam);
|
||||
return Success;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -1524,7 +1503,6 @@ XpGetTrayMediumFromContext(XpContextPtr pCon,
|
||||
{
|
||||
char *defMedium, *defTray;
|
||||
char *t, *m;
|
||||
char *pS, *pE, *pLast;
|
||||
|
||||
defMedium = XpGetOneAttribute( pCon, XPPageAttr,
|
||||
"default-medium" );
|
||||
|
||||
Reference in New Issue
Block a user