/****************************************************************************** * 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; }
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 ); }