Example #1
0
File: xdg.c Project: Kelimion/wine
/******************************************************************************
 * XDG_WriteDesktopStringEntry    [internal]
 *
 * Writes a key=value pair into the specified file descriptor.
 *
 * RETURNS
 *   TRUE on success, else FALSE
 */
BOOL XDG_WriteDesktopStringEntry(int writer, const char *keyName, DWORD dwFlags, const char *value)
{
    int keyLen = lstrlenA(keyName);
    int valueLen = escape_value(value, dwFlags, NULL);
    char *string = SHAlloc(keyLen+1+valueLen);
    BOOL ret;
    
    if (string == NULL)
        return FALSE;
    lstrcpyA(string, keyName);
    string[keyLen] = '=';
    escape_value(value, dwFlags, string+keyLen+1);
    string[keyLen+1+valueLen-1]='\n';   /* -1 because valueLen contains the last NUL character */
    ret = (write(writer, string, keyLen+1+valueLen)!=-1);
    SHFree(string);
    return ret;
}
Example #2
0
nx_string_t *nx_logdata_to_kvp(nx_kvp_ctx_t *ctx, nx_logdata_t *logdata)
{
    nx_string_t *retval = NULL;
    char *string = NULL;
    nx_string_t *tmp = NULL;
    nx_exception_t e;
    nx_logdata_field_t *field = NULL;
    char kvpdelimiter = ';';
    char kvdelimiter = '=';

    ASSERT(ctx != NULL);
    ASSERT(logdata != NULL);

    if ( ctx->kvdelimiter != '\0' )
    {
	kvdelimiter = ctx->kvdelimiter;
    }
    if ( ctx->kvpdelimiter != '\0' )
    {
	kvpdelimiter = ctx->kvpdelimiter;
    }

    retval = nx_string_new_size(150);

    try
    {
	for ( field = NX_DLIST_FIRST(&(logdata->fields));
	      field != NULL;
	      field = NX_DLIST_NEXT(field, link) )
	{
	    if ( strcmp(field->key, "raw_event") == 0 )
	    { // don't write raw event
		continue;
	    }

	    if ( (field->key[0] == '.') || (field->key[0] == '_') )
	    {
		continue;
	    }

	    nx_string_append(retval, field->key, -1);
	    nx_string_append(retval, &kvdelimiter, 1);

	    ASSERT(field->value != NULL);
	    if ( field->value->defined == FALSE )
	    { // don't write undef
	    }
	    else
	    {
		if ( field->value->type == NX_VALUE_TYPE_STRING )
		{
		    if ( field->value->string->len > 0 )
		    {
			tmp = nx_string_clone(field->value->string);
			escape_value(tmp, ctx);
			nx_string_append(retval, tmp->buf, (int) tmp->len);
			nx_string_free(tmp);
		    }
		}
		else
		{
		    string = nx_value_to_string(field->value);
		    if ( string != NULL )
		    {
			nx_string_append(retval, string, -1);
		    }
		}
	    }
	    nx_string_append(retval, &kvpdelimiter, 1);
	}
    }
    catch(e)
    {
	if ( string != NULL )
	{
	    free(string);
	}
	if ( tmp != NULL )
	{
	    nx_string_free(tmp);
	}
	if ( retval != NULL )
	{
	    nx_string_free(retval);
	}
	rethrow(e);
    }

    return ( retval );
}