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

📄 xmlrpc.c

📁 PHP v6.0 For Linux 运行环境:Win9X/ WinME/ WinNT/ Win2K/ WinXP
💻 C
📖 第 1 页 / 共 5 页
字号:
 * NAME *   XMLRPC_SetValueDateTime * SYNOPSIS *   void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) * FUNCTION *   Assign time value to XMLRPC_VALUE * INPUTS *   value     The target XMLRPC_VALUE *   time      The desired new unix time value (time_t) * RESULT *   void * SEE ALSO *   XMLRPC_GetValueDateTime () *   XMLRPC_SetValueDateTime_ISO8601 () *   XMLRPC_CreateValueDateTime () *   XMLRPC_VALUE * SOURCE */void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time) {   if(value) {      char timeBuf[30];      value->type = xmlrpc_datetime;      value->i = time;      timeBuf[0] = 0;      date_to_ISO8601(time, timeBuf, sizeof(timeBuf));      if(timeBuf[0]) {         simplestring_clear(&value->str);         simplestring_add(&value->str, timeBuf);      }   }}/*******//****f* VALUE/XMLRPC_CopyValue * NAME *   XMLRPC_CopyValue * SYNOPSIS *   XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value) * FUNCTION *   Make a copy (reference) of an XMLRPC_VALUE * INPUTS *   value     The target XMLRPC_VALUE * RESULT *   XMLRPC_VALUE -- address of the copy * SEE ALSO *   XMLRPC_CleanupValue () *   XMLRPC_DupValueNew () * NOTES *   This function is implemented via reference counting, so the *   returned value is going to be the same as the passed in value. *   The value must be freed the same number of times it is copied *   or there will be a memory leak. * SOURCE */XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value) {   if(value) {      value->iRefCount ++;#ifdef XMLRPC_DEBUG_REFCOUNT      if(value->id.str) {			printf ("incremented refcount of %s, now %i\n", value->id.str,					  value->iRefCount);		}		else {			printf ("incremented refcount of 0x%x, now %i\n", value,					  value->iRefCount);      }#endif   }   return value;}/*******//****f* VALUE/XMLRPC_DupValueNew * NAME *   XMLRPC_DupValueNew * SYNOPSIS *   XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE value) * FUNCTION *   Make a duplicate (non reference) of an XMLRPC_VALUE with newly allocated mem. * INPUTS *   value     The source XMLRPC_VALUE to duplicate * RESULT *   XMLRPC_VALUE -- address of the duplicate value * SEE ALSO *   XMLRPC_CleanupValue () *   XMLRPC_CopyValue () * NOTES *   Use this when function when you need to modify the contents of *   the copied value seperately from the original. *    *   this function is recursive, thus the value and all of its children *   (if any) will be duplicated. * SOURCE */XMLRPC_VALUE XMLRPC_DupValueNew (XMLRPC_VALUE xSource) {	XMLRPC_VALUE xReturn = NULL;	if (xSource) {		xReturn = XMLRPC_CreateValueEmpty ();		if (xSource->id.len) {			XMLRPC_SetValueID (xReturn, xSource->id.str, xSource->id.len);		}		switch (xSource->type) {		case xmlrpc_int:		case xmlrpc_boolean:			XMLRPC_SetValueInt (xReturn, xSource->i);			break;		case xmlrpc_string:		case xmlrpc_base64:			XMLRPC_SetValueString (xReturn, xSource->str.str, xSource->str.len);			break;		case xmlrpc_datetime:			XMLRPC_SetValueDateTime (xReturn, xSource->i);			break;		case xmlrpc_double:			XMLRPC_SetValueDouble (xReturn, xSource->d);			break;		case xmlrpc_vector:			{				q_iter qi = Q_Iter_Head_F (xSource->v->q);				XMLRPC_SetIsVector (xReturn, xSource->v->type);				while (qi) {					XMLRPC_VALUE xIter = Q_Iter_Get_F (qi);					XMLRPC_AddValueToVector (xReturn, XMLRPC_DupValueNew (xIter));					qi = Q_Iter_Next_F (qi);				}			}			break;		default:			break;		}	}	return xReturn;}/*******//****f* VALUE/XMLRPC_CreateValueDateTime * NAME *   XMLRPC_CreateValueDateTime * SYNOPSIS *   XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time) * FUNCTION *   Create new datetime value from time_t * INPUTS *   id        id of the new value, or NULL *   time      The desired unix time value (time_t) * RESULT *   void * SEE ALSO *   XMLRPC_GetValueDateTime () *   XMLRPC_SetValueDateTime () *   XMLRPC_CreateValueDateTime_ISO8601 () *   XMLRPC_VALUE * SOURCE */XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time) {   XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();   if(val) {      XMLRPC_SetValueDateTime(val, time);      if(id) {         XMLRPC_SetValueID(val, id, 0);      }   }   return val;}/*******//****f* VALUE/XMLRPC_SetValueDateTime_ISO8601 * NAME *   XMLRPC_SetValueDateTime_ISO8601 * SYNOPSIS *   void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) * FUNCTION *   Set datetime value from IS08601 encoded string * INPUTS *   value     The target XMLRPC_VALUE *   s         The desired new time value * RESULT *   void                                 * BUGS *   This function currently attempts to convert the time string to a valid unix time *   value before passing it. Behavior when the string is invalid or out of range *   is not well defined, but will probably result in Jan 1, 1970 (0) being passed. * SEE ALSO *   XMLRPC_GetValueDateTime_ISO8601 () *   XMLRPC_CreateValueDateTime_ISO8601 () *   XMLRPC_CreateValueDateTime () *   XMLRPC_VALUE * SOURCE */void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s) {   if(value) {      time_t time_val = 0;      if(s) {         date_from_ISO8601(s, &time_val);         XMLRPC_SetValueDateTime(value, time_val);      }   }}/*******//****f* VALUE/XMLRPC_CreateValueDateTime_ISO8601 * NAME *   XMLRPC_CreateValueDateTime_ISO8601 * SYNOPSIS *   XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s) * FUNCTION *   Create datetime value from IS08601 encoded string * INPUTS *   id        The id of the new value, or NULL *   s         The desired new time value * RESULT *   newly allocated XMLRPC_VALUE, or NULL if no value created.                                 * BUGS *   See XMLRPC_SetValueDateTime_ISO8601 () * SEE ALSO *   XMLRPC_GetValueDateTime_ISO8601 () *   XMLRPC_SetValueDateTime_ISO8601 () *   XMLRPC_CreateValueDateTime () *   XMLRPC_VALUE * SOURCE */XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s) {   XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();   if(val) {      XMLRPC_SetValueDateTime_ISO8601(val, s);      if(id) {         XMLRPC_SetValueID(val, id, 0);      }   }   return val;}/*******//****f* VALUE/XMLRPC_SetValueBase64 * NAME *   XMLRPC_SetValueBase64 * SYNOPSIS *   void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len) * FUNCTION *   Set base64 value.  Base64 is useful for transferring binary data, such as an image. * INPUTS *   value     The target XMLRPC_VALUE *   s         The desired new binary value *   len       The length of s, or NULL. If buffer is not null terminated, len *must* be passed. * RESULT *   void                                 * NOTES *   Data is set/stored/retrieved as passed in, but is base64 encoded for XML transfer, and *   decoded on the other side.  This is transparent to the caller. * SEE ALSO *   XMLRPC_GetValueBase64 () *   XMLRPC_CreateValueBase64 () *   XMLRPC_VALUE * SOURCE */void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len) {   if(value && s) {      simplestring_clear(&value->str);      (len > 0) ? simplestring_addn(&value->str, s, len) :                  simplestring_add(&value->str, s);      value->type = xmlrpc_base64;   }}/*******//****f* VALUE/XMLRPC_CreateValueBase64 * NAME *   XMLRPC_CreateValueBase64 * SYNOPSIS *   XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len) * FUNCTION *   Create base64 value.  Base64 is useful for transferring binary data, such as an image. * INPUTS *   id        id of the new value, or NULL *   s         The desired new binary value *   len       The length of s, or NULL. If buffer is not null terminated, len *must* be passed. * RESULT *   newly allocated XMLRPC_VALUE, or NULL if error * NOTES *   See XMLRPC_SetValueBase64 () * SEE ALSO *   XMLRPC_GetValueBase64 () *   XMLRPC_SetValueBase64 () *   XMLRPC_VALUE * SOURCE */XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len) {   XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();   if(val) {      XMLRPC_SetValueBase64(val, s, len);      if(id) {         XMLRPC_SetValueID(val, id, 0);      }   }   return val;}/*******//****f* VALUE/XMLRPC_SetValueDouble * NAME *   XMLRPC_SetValueDouble * SYNOPSIS *   void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val) * FUNCTION *   Set double (floating point) value. * INPUTS *   value     The target XMLRPC_VALUE *   val       The desired new double value * RESULT *   void                                 * SEE ALSO *   XMLRPC_GetValueDouble () *   XMLRPC_CreateValueDouble () *   XMLRPC_VALUE * SOURCE */void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val) {   if(value) {      value->type = xmlrpc_double;      value->d = val;   }}/*******//****f* VALUE/XMLRPC_CreateValueDouble * NAME *   XMLRPC_CreateValueDouble * SYNOPSIS *   XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d) * FUNCTION *   Create double (floating point) value. * INPUTS *   id        id of the newly created value, or NULL *   d         The desired new double value * RESULT *   void                                 * SEE ALSO *   XMLRPC_GetValueDouble () *   XMLRPC_CreateValueDouble () *   XMLRPC_VALUE * SOURCE */XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double d) {   XMLRPC_VALUE val = XMLRPC_CreateValueEmpty();   if(val) {      XMLRPC_SetValueDouble(val, d);      if(id) {         XMLRPC_SetValueID(val, id, 0);      }   }   return val;}/*******//****f* VALUE/XMLRPC_GetValueString * NAME *   XMLRPC_GetValueString * SYNOPSIS *   const char* XMLRPC_GetValueString(XMLRPC_VALUE value) * FUNCTION *   retrieve string value * INPUTS *   value     source XMLRPC_VALUE of type xmlrpc_string * RESULT *   void                                 * SEE ALSO *   XMLRPC_SetValueString () *   XMLRPC_GetValueType () *   XMLRPC_VALUE * SOURCE */const char* XMLRPC_GetValueString(XMLRPC_VALUE value) {    return ((value && value->type == xmlrpc_string) ? value->str.str : 0);}/*******//****f* VALUE/XMLRPC_GetValueStringLen * NAME *   XMLRPC_GetValueStringLen * SYNOPSIS *   int XMLRPC_GetValueStringLen(XMLRPC_VALUE value) * FUNCTION *   determine length of string value * INPUTS *   value     XMLRPC_VALUE of type xmlrpc_string  * RESULT *   length of string, or 0 * NOTES * SEE ALSO *   XMLRPC_SetValueString () *   XMLRPC_GetValueString () * SOURCE */int XMLRPC_GetValueStringLen(XMLRPC_VALUE value) {    return ((value) ? value->str.len : 0);}/*******//****f* VALUE/XMLRPC_GetValueInt * NAME *   XMLRPC_GetValueInt * SYNOPSIS *   int XMLRPC_GetValueInt(XMLRPC_VALUE value) * FUNCTION *   retrieve integer value. * INPUTS *   value     XMLRPC_VALUE of type xmlrpc_int  * RESULT *   integer value or 0 if value is not valid int * NOTES *   use XMLRPC_GetValueType () to be sure if 0 is real return value or not * SEE ALSO *   XMLRPC_SetValueInt () *   XMLRPC_CreateValueInt () * SOURCE */int XMLRPC_GetValueInt(XMLRPC_VALUE value) {    return ((value && value->type == xmlrpc_int) ? value->i : 0);}/*******//****f* VALUE/XMLRPC_GetValueBoolean * NAME *   XMLRPC_GetValueBoolean * SYNOPSIS *   int XMLRPC_GetValueBoolean(XMLRPC_VALUE value) * FUNCTION *   retrieve boolean value. * INPUTS *   XMLRPC_VALUE of type xmlrpc_boolean * RESULT *   boolean value or 0 if value is not valid boolean * NOTES *   use XMLRPC_GetValueType() to be sure if 0 is real value or not * SEE ALSO *   XMLRPC_SetValueBoolean () *   XMLRPC_CreateValueBoolean () * SOURCE */int XMLRPC_GetValueBoolean(XMLRPC_VALUE value) {    return ((value && value->type == xmlrpc_boolean) ? value->i : 0);}/*******//****f* VALUE/XMLRPC_GetValueDouble * NAME *   XMLRPC_GetValueDouble * SYNOPSIS *   double XMLRPC_GetValueDouble(XMLRPC_VALUE value) * FUNCTION *   retrieve double value * INPUTS *   XMLRPC_VALUE of type xmlrpc_double * RESULT *   double value or 0 if value is not valid double. * NOTES *   use XMLRPC_GetValueType() to be sure if 0 is real value or not * SEE ALSO *   XMLRPC_SetValueDouble () *   XMLRPC_CreateValueDouble () * SOURCE */double XMLRPC_GetValueDouble(XMLRPC_VALUE value) {    return ((value && value->type == xmlrpc_double) ? value->d : 0);}/*******/

⌨️ 快捷键说明

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