/************************************************************************ * Function : membuffer_set_size * * Parameters : * INOUT membuffer* m ; buffer whose size is to be modified * IN size_t new_length ; new size to which the buffer will be * modified * * Description : Increases or decreases buffer cap so that at least * 'new_length' bytes can be stored * * Return : int ; * UPNP_E_SUCCESS - On Success * UPNP_E_OUTOF_MEMORY - On failure to allocate memory. * * Note : ************************************************************************/ int membuffer_set_size( INOUT membuffer * m, IN size_t new_length ) { size_t diff; size_t alloc_len; char *temp_buf; if( new_length >= m->length ) // increase length { // need more mem? if( new_length <= m->capacity ) { return 0; // have enough mem; done } diff = new_length - m->length; alloc_len = MAXVAL( m->size_inc, diff ) + m->capacity; } else // decrease length { assert( new_length <= m->length ); // if diff is 0..m->size_inc, don't free if( ( m->capacity - new_length ) <= m->size_inc ) { return 0; } alloc_len = new_length + m->size_inc; } assert( alloc_len >= new_length ); temp_buf = realloc( m->buf, alloc_len + 1 ); //LEAK_FIX_MK //temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );//LEAK_FIX_MK if( temp_buf == NULL ) { // try smaller size alloc_len = new_length; temp_buf = realloc( m->buf, alloc_len + 1 ); //LEAK_FIX_MK //temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );//LEAK_FIX_MK if( temp_buf == NULL ) { return UPNP_E_OUTOF_MEMORY; } } // save m->buf = temp_buf; m->capacity = alloc_len; return 0; }
int membuffer_set_size(membuffer *m, size_t new_length) { size_t diff; size_t alloc_len; char *temp_buf; if (new_length >= m->length) { /* increase length */ /* need more mem? */ if (new_length <= m->capacity) { return 0; /* have enough mem; done */ } diff = new_length - m->length; alloc_len = MAXVAL(m->size_inc, diff) + m->capacity; } else { /* decrease length */ assert(new_length <= m->length); /* if diff is 0..m->size_inc, don't free */ if ((m->capacity - new_length) <= m->size_inc) { return 0; } alloc_len = new_length + m->size_inc; } assert(alloc_len >= new_length); temp_buf = tls_mem_realloc(m->buf, alloc_len + (size_t)1); /*LEAK_FIX_MK */ /*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */ if (temp_buf == NULL) { /* try smaller size */ alloc_len = new_length; temp_buf = tls_mem_realloc(m->buf, alloc_len + (size_t)1); /*LEAK_FIX_MK */ /*temp_buf = Realloc( m->buf,m->length, alloc_len + 1 );LEAK_FIX_MK */ if (temp_buf == NULL) { return UPNP_E_OUTOF_MEMORY; } } /* save */ m->buf = temp_buf; m->capacity = alloc_len; return 0; }
/*================================================================ * ixml_membuf_set_size * * Increases or decreases buffer cap so that at least * 'new_length' bytes can be stored * * On error, m's fields do not change. * * returns: * UPNP_E_SUCCESS * UPNP_E_OUTOF_MEMORY * *=================================================================*/ static int ixml_membuf_set_size( INOUT ixml_membuf * m, IN size_t new_length ) { size_t diff; size_t alloc_len; char *temp_buf; if( new_length >= m->length ) // increase length { // need more mem? if( new_length <= m->capacity ) { return 0; // have enough mem; done } diff = new_length - m->length; alloc_len = MAXVAL( m->size_inc, diff ) + m->capacity; } else // decrease length { assert( new_length <= m->length ); // if diff is 0..m->size_inc, don't free if( ( m->capacity - new_length ) <= m->size_inc ) { return 0; } alloc_len = new_length + m->size_inc; } assert( alloc_len >= new_length ); temp_buf = (char*)realloc( m->buf, alloc_len + 1 ); if( temp_buf == NULL ) { // try smaller size alloc_len = new_length; temp_buf = (char*)realloc( m->buf, alloc_len + 1 ); if( temp_buf == NULL ) { return IXML_INSUFFICIENT_MEMORY; } } // save m->buf = temp_buf; m->capacity = alloc_len; return 0; }
int zBufSetSize(PZ_BUF zBuf, int newLen) { int diff; int allocLen; char *tempBuf; if (newLen >= zBuf->length) { // need more mem? if (newLen <= zBuf->capacity) { return 0; // have enough mem; done } diff = newLen - zBuf->length; allocLen = MAXVAL(zBuf->size_inc, diff) + zBuf->capacity; } else { // if diff is 0..zBuf->size_inc, don't free if ((zBuf->capacity - newLen ) <= zBuf->size_inc) { return 0; } allocLen = newLen + zBuf->size_inc; } if (allocLen < INITIAL_BUF_SIZE) { allocLen = INITIAL_BUF_SIZE; } tempBuf = realloc(zBuf->buf, allocLen + 1); if (tempBuf == NULL) { // try smaller size allocLen = newLen; tempBuf = realloc(zBuf->buf, allocLen + 1); if (tempBuf == NULL) { return 0; } } // save zBuf->buf = tempBuf; zBuf->capacity = allocLen; return 0; }
void mconfig_configure(struct MConfig* cfg, pointer opts) { // Configure MTState cfg->touch_down = CLAMPVAL(xf86SetIntOption(opts, "FingerHigh", DEFAULT_TOUCH_DOWN), 0, 100); cfg->touch_up = CLAMPVAL(xf86SetIntOption(opts, "FingerLow", DEFAULT_TOUCH_UP), 0, 100); cfg->ignore_thumb = xf86SetBoolOption(opts, "IgnoreThumb", DEFAULT_IGNORE_THUMB); cfg->ignore_palm = xf86SetBoolOption(opts, "IgnorePalm", DEFAULT_IGNORE_PALM); cfg->disable_on_thumb = xf86SetBoolOption(opts, "DisableOnThumb", DEFAULT_DISABLE_ON_THUMB); cfg->disable_on_palm = xf86SetBoolOption(opts, "DisableOnPalm", DEFAULT_DISABLE_ON_PALM); cfg->thumb_ratio = CLAMPVAL(xf86SetIntOption(opts, "ThumbRatio", DEFAULT_THUMB_RATIO), 0, 100); cfg->thumb_size = CLAMPVAL(xf86SetIntOption(opts, "ThumbSize", DEFAULT_THUMB_SIZE), 0, 100); cfg->palm_size = CLAMPVAL(xf86SetIntOption(opts, "PalmSize", DEFAULT_PALM_SIZE), 0, 100); // Configure Gestures cfg->trackpad_disable = CLAMPVAL(xf86SetIntOption(opts, "TrackpadDisable", DEFAULT_TRACKPAD_DISABLE), 0, 3); cfg->button_enable = xf86SetBoolOption(opts, "ButtonEnable", DEFAULT_BUTTON_ENABLE); cfg->button_integrated = xf86SetBoolOption(opts, "ButtonIntegrated", DEFAULT_BUTTON_INTEGRATED); cfg->button_expire = MAXVAL(xf86SetIntOption(opts, "ButtonTouchExpire", DEFAULT_BUTTON_EXPIRE), 0); cfg->button_zones = xf86SetBoolOption(opts, "ButtonZonesEnable", DEFAULT_BUTTON_ZONES); cfg->button_1touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger1", DEFAULT_BUTTON_1TOUCH), 0, 32); cfg->button_2touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger2", DEFAULT_BUTTON_2TOUCH), 0, 32); cfg->button_3touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger3", DEFAULT_BUTTON_3TOUCH), 0, 32); cfg->tap_1touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton1", DEFAULT_TAP_1TOUCH), 0, 32); cfg->tap_2touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton2", DEFAULT_TAP_2TOUCH), 0, 32); cfg->tap_3touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton3", DEFAULT_TAP_3TOUCH), 0, 32); cfg->tap_4touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton4", DEFAULT_TAP_4TOUCH), 0, 32); cfg->tap_hold = MAXVAL(xf86SetIntOption(opts, "ClickTime", DEFAULT_TAP_HOLD), 1); cfg->tap_timeout = MAXVAL(xf86SetIntOption(opts, "MaxTapTime", DEFAULT_TAP_TIMEOUT), 1); cfg->tap_dist = MAXVAL(xf86SetIntOption(opts, "MaxTapMove", DEFAULT_TAP_DIST), 1); cfg->gesture_hold = MAXVAL(xf86SetIntOption(opts, "GestureClickTime", DEFAULT_GESTURE_HOLD), 1); cfg->gesture_wait = MAXVAL(xf86SetIntOption(opts, "GestureWaitTime", DEFAULT_GESTURE_WAIT), 0); cfg->scroll_dist = MAXVAL(xf86SetIntOption(opts, "ScrollDistance", DEFAULT_SCROLL_DIST), 1); cfg->scroll_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollUpButton", DEFAULT_SCROLL_UP_BTN), 0, 32); cfg->scroll_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollDownButton", DEFAULT_SCROLL_DN_BTN), 0, 32); cfg->scroll_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollLeftButton", DEFAULT_SCROLL_LT_BTN), 0, 32); cfg->scroll_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollRightButton", DEFAULT_SCROLL_RT_BTN), 0, 32); cfg->swipe_dist = MAXVAL(xf86SetIntOption(opts, "SwipeDistance", DEFAULT_SWIPE_DIST), 1); cfg->swipe_up_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeUpButton", DEFAULT_SWIPE_UP_BTN), 0, 32); cfg->swipe_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeDownButton", DEFAULT_SWIPE_DN_BTN), 0, 32); cfg->swipe_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeLeftButton", DEFAULT_SWIPE_LT_BTN), 0, 32); cfg->swipe_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeRightButton", DEFAULT_SWIPE_RT_BTN), 0, 32); cfg->swipe4_dist = MAXVAL(xf86SetIntOption(opts, "Swipe4Distance", DEFAULT_SWIPE4_DIST), 1); cfg->swipe4_up_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4UpButton", DEFAULT_SWIPE4_UP_BTN), 0, 32); cfg->swipe4_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4DownButton", DEFAULT_SWIPE4_DN_BTN), 0, 32); cfg->swipe4_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4LeftButton", DEFAULT_SWIPE4_LT_BTN), 0, 32); cfg->swipe4_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4RightButton", DEFAULT_SWIPE4_RT_BTN), 0, 32); cfg->scale_dist = MAXVAL(xf86SetIntOption(opts, "ScaleDistance", DEFAULT_SCALE_DIST), 1); cfg->scale_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleUpButton", DEFAULT_SCALE_UP_BTN), 0, 32); cfg->scale_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleDownButton", DEFAULT_SCALE_DN_BTN), 0, 32); cfg->rotate_dist = MAXVAL(xf86SetIntOption(opts, "RotateDistance", DEFAULT_ROTATE_DIST), 1); cfg->rotate_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateLeftButton", DEFAULT_ROTATE_LT_BTN), 0, 32); cfg->rotate_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateRightButton", DEFAULT_ROTATE_RT_BTN), 0, 23); cfg->drag_enable = xf86SetBoolOption(opts, "TapDragEnable", DEFAULT_DRAG_ENABLE); cfg->drag_timeout = MAXVAL(xf86SetIntOption(opts, "TapDragTime", DEFAULT_DRAG_TIMEOUT), 1); cfg->drag_wait = MAXVAL(xf86SetIntOption(opts, "TapDragWait", DEFAULT_DRAG_WAIT), 0); cfg->drag_dist = MAXVAL(xf86SetIntOption(opts, "TapDragDist", DEFAULT_DRAG_DIST), 0); cfg->sensitivity = MAXVAL(xf86SetRealOption(opts, "Sensitivity", DEFAULT_SENSITIVITY), 0); }
void ssdp_handle_device_request(http_message_t *hmsg, struct sockaddr_storage *dest_addr) { #define MX_FUDGE_FACTOR 10 int handle; struct Handle_Info *dev_info = NULL; memptr hdr_value; int mx; char save_char; SsdpEvent event; int ret_code; SsdpSearchReply *threadArg = NULL; ThreadPoolJob job; int replyTime; int maxAge; memset(&job, 0, sizeof(job)); /* check man hdr. */ if (httpmsg_find_hdr(hmsg, HDR_MAN, &hdr_value) == NULL || memptr_cmp(&hdr_value, "\"ssdp:discover\"") != 0) /* bad or missing hdr. */ return; /* MX header. */ if (httpmsg_find_hdr(hmsg, HDR_MX, &hdr_value) == NULL || (mx = raw_to_int(&hdr_value, 10)) < 0) return; /* ST header. */ if (httpmsg_find_hdr(hmsg, HDR_ST, &hdr_value) == NULL) return; save_char = hdr_value.buf[hdr_value.length]; hdr_value.buf[hdr_value.length] = '\0'; ret_code = ssdp_request_type(hdr_value.buf, &event); /* restore. */ hdr_value.buf[hdr_value.length] = save_char; if (ret_code == -1) /* bad ST header. */ return; HandleLock(); /* device info. */ switch (GetDeviceHandleInfo((int)dest_addr->ss_family, &handle, &dev_info)) { case HND_DEVICE: break; default: HandleUnlock(); /* no info found. */ return; } maxAge = dev_info->MaxAge; HandleUnlock(); UpnpPrintf(UPNP_PACKET, API, __FILE__, __LINE__, "MAX-AGE = %d\n", maxAge); UpnpPrintf(UPNP_PACKET, API, __FILE__, __LINE__, "MX = %d\n", event.Mx); UpnpPrintf(UPNP_PACKET, API, __FILE__, __LINE__, "DeviceType = %s\n", event.DeviceType); UpnpPrintf(UPNP_PACKET, API, __FILE__, __LINE__, "DeviceUuid = %s\n", event.UDN); UpnpPrintf(UPNP_PACKET, API, __FILE__, __LINE__, "ServiceType = %s\n", event.ServiceType); threadArg = (SsdpSearchReply *)malloc(sizeof(SsdpSearchReply)); if (threadArg == NULL) return; threadArg->handle = handle; memcpy(&threadArg->dest_addr, dest_addr, sizeof(threadArg->dest_addr)); threadArg->event = event; threadArg->MaxAge = maxAge; TPJobInit(&job, advertiseAndReplyThread, threadArg); TPJobSetFreeFunction(&job, (free_routine) free); /* Subtract a percentage from the mx to allow for network and processing * delays (i.e. if search is for 30 seconds, respond * within 0 - 27 seconds). */ if (mx >= 2) mx -= MAXVAL(1, mx / MX_FUDGE_FACTOR); if (mx < 1) mx = 1; replyTime = rand() % mx; TimerThreadSchedule(&gTimerThread, replyTime, REL_SEC, &job, SHORT_TERM, NULL); }
unsigned expand( uint8_t *src, uint8_t *dst, size_t length ) /**********************************************************/ { uint8_t *dstStart; /* Saved start of output buffer */ uint8_t *srcStart; /* Saved start of compressed data */ uint8_t *tmpChar; codepos_t *codePos; /* Position of previous strings in output */ uint16_t numBits; uint16_t maxCode; uint16_t nextCode; uint16_t newCode; uint16_t oldCode = 0; uint16_t code; uint8_t character = 0; uint8_t clearFlg = 1; uint16_t bitCount = 0; uint32_t bitBuffer = 0; srcStart = src; dstStart = dst; nextCode = FIRST_CODE; numBits = INIT_BITS; maxCode = MAXVAL( numBits ); codePos = calloc( 1, TABLE_SIZE * sizeof( codepos_t ) ); if( codePos == NULL ) { printf( "Error: failed to allocate decompressor table.\n" ); return( 0 ); } for( ;; ) { /* Check for source buffer overrun */ if( src - srcStart > length ) { printf( "Error: src - start = %d, length = %d\n", src - srcStart, length ); break; } while( bitCount <= 24 ) { bitBuffer |= (uint32_t)*src++ << ( 24 - bitCount ); bitCount += 8; } newCode = (uint16_t)( bitBuffer >> ( 32 - numBits ) ); if( newCode == TERMINATOR ) break; /* Check for decompressor table overflow */ if( newCode >= TABLE_SIZE ) { printf( "Error: newCode = %d\n", newCode ); break; } else { // printf( "newCode = %d\n", newCode ); } bitBuffer <<= numBits; bitCount -= numBits; if( clearFlg ) { /* Clear the decompressor's tables */ clearFlg = 0; codePos[ newCode ].offset = (uint16_t)( dst - dstStart ); codePos[ newCode ].length = 1; oldCode = newCode; *dst++ = character = (uint8_t)newCode; } else if( newCode == CLEAR_TABLE ) { clearFlg = 1; nextCode = FIRST_CODE; numBits = INIT_BITS; maxCode = MAXVAL( numBits ); } else { if( newCode < CLEAR_TABLE ) { codePos[ newCode ].offset = (uint16_t)( ( tmpChar = dst ) - dstStart ); codePos[ newCode ].length = 1; *dst++ = character = (uint8_t)newCode; } else { code = newCode; if( code >= nextCode ) code = oldCode; /* Special handling for string/char/string */ /* Copy previously decompressed string to output buffer */ tmpChar = memcpy( dst, dstStart + codePos[ code ].offset, codePos[ code ].length ); dst += codePos[ code ].length; if( newCode >= nextCode ) *dst++ = character; character = *tmpChar; } /* Check for decompressor table overflow */ if( nextCode >= TABLE_SIZE ) { printf( "Error: nextCode = %d\n", nextCode ); break; } codePos[ nextCode ].offset = (uint16_t)( tmpChar - dstStart ) - codePos[ oldCode ].length; codePos[ nextCode ].length = codePos[ oldCode ].length + 1; ++nextCode; if( nextCode == maxCode && numBits < 12 ) maxCode = MAXVAL( ++numBits ); oldCode = newCode; } } free( codePos ); return( dst - dstStart ); }
void mconfig_configure(struct MConfig* cfg, pointer opts) { // Configure MTState cfg->touch_down = CLAMPVAL(xf86SetIntOption(opts, "FingerHigh", DEFAULT_TOUCH_DOWN), 0, 100); cfg->touch_up = CLAMPVAL(xf86SetIntOption(opts, "FingerLow", DEFAULT_TOUCH_UP), 0, 100); cfg->ignore_thumb = xf86SetBoolOption(opts, "IgnoreThumb", DEFAULT_IGNORE_THUMB); cfg->ignore_palm = xf86SetBoolOption(opts, "IgnorePalm", DEFAULT_IGNORE_PALM); cfg->disable_on_thumb = xf86SetBoolOption(opts, "DisableOnThumb", DEFAULT_DISABLE_ON_THUMB); cfg->disable_on_palm = xf86SetBoolOption(opts, "DisableOnPalm", DEFAULT_DISABLE_ON_PALM); cfg->thumb_ratio = CLAMPVAL(xf86SetIntOption(opts, "ThumbRatio", DEFAULT_THUMB_RATIO), 0, 100); cfg->thumb_size = CLAMPVAL(xf86SetIntOption(opts, "ThumbSize", DEFAULT_THUMB_SIZE), 0, 100); cfg->palm_size = CLAMPVAL(xf86SetIntOption(opts, "PalmSize", DEFAULT_PALM_SIZE), 0, 100); cfg->edge_left_size = CLAMPVAL(xf86SetIntOption(opts, "EdgeLeftSize", DEFAULT_EDGE_LEFT_SIZE), 0, 100); cfg->edge_right_size = CLAMPVAL(xf86SetIntOption(opts, "EdgeRightSize", DEFAULT_EDGE_RIGHT_SIZE), 0, 100); cfg->edge_top_size = CLAMPVAL(xf86SetIntOption(opts, "EdgeTopSize", DEFAULT_EDGE_TOP_SIZE), 0, 100); cfg->edge_bottom_size = CLAMPVAL(xf86SetIntOption(opts, "EdgeBottomSize", DEFAULT_EDGE_BOTTOM_SIZE), 0, 100); // Configure Gestures cfg->trackpad_disable = CLAMPVAL(xf86SetIntOption(opts, "TrackpadDisable", DEFAULT_TRACKPAD_DISABLE), 0, 3); cfg->button_enable = xf86SetBoolOption(opts, "ButtonEnable", DEFAULT_BUTTON_ENABLE); cfg->button_integrated = xf86SetBoolOption(opts, "ButtonIntegrated", DEFAULT_BUTTON_INTEGRATED); cfg->button_expire = MAXVAL(xf86SetIntOption(opts, "ButtonTouchExpire", DEFAULT_BUTTON_EXPIRE), 0); cfg->button_zones = xf86SetBoolOption(opts, "ButtonZonesEnable", DEFAULT_BUTTON_ZONES); cfg->button_1touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger1", DEFAULT_BUTTON_1TOUCH), 0, 32); cfg->button_2touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger2", DEFAULT_BUTTON_2TOUCH), 0, 32); cfg->button_3touch = CLAMPVAL(xf86SetIntOption(opts, "ClickFinger3", DEFAULT_BUTTON_3TOUCH), 0, 32); cfg->button_move = xf86SetBoolOption(opts, "ButtonMoveEmulate", DEFAULT_BUTTON_MOVE); cfg->tap_1touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton1", DEFAULT_TAP_1TOUCH), 0, 32); cfg->tap_2touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton2", DEFAULT_TAP_2TOUCH), 0, 32); cfg->tap_3touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton3", DEFAULT_TAP_3TOUCH), 0, 32); cfg->tap_4touch = CLAMPVAL(xf86SetIntOption(opts, "TapButton4", DEFAULT_TAP_4TOUCH), 0, 32); cfg->tap_hold = MAXVAL(xf86SetIntOption(opts, "ClickTime", DEFAULT_TAP_HOLD), 1); cfg->tap_timeout = MAXVAL(xf86SetIntOption(opts, "MaxTapTime", DEFAULT_TAP_TIMEOUT), 1); cfg->tap_dist = MAXVAL(xf86SetIntOption(opts, "MaxTapMove", DEFAULT_TAP_DIST), 1); cfg->gesture_hold = MAXVAL(xf86SetIntOption(opts, "GestureClickTime", DEFAULT_GESTURE_HOLD), 1); cfg->gesture_wait = MAXVAL(xf86SetIntOption(opts, "GestureWaitTime", DEFAULT_GESTURE_WAIT), 0); cfg->scroll_smooth = CLAMPVAL(xf86SetIntOption(opts, "ScrollSmooth", DEFAULT_SCROLL_HIGH_PREC), 0, 1); cfg->scroll.dist = MAXVAL(xf86SetIntOption(opts, "ScrollDistance", DEFAULT_SCROLL_DIST), 1); cfg->scroll.hold = MAXVAL(xf86SetIntOption(opts, "ScrollClickTime", DEFAULT_SCROLL_HOLD), 0); cfg->scroll.drag_sens = MAXVAL(xf86SetIntOption(opts, "ScrollSensitivity", DEFAULT_SWIPE_SENS), 0); cfg->scroll.up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollUpButton", DEFAULT_SCROLL_UP_BTN), 0, 32); cfg->scroll.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollDownButton", DEFAULT_SCROLL_DN_BTN), 0, 32); cfg->scroll.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollLeftButton", DEFAULT_SCROLL_LT_BTN), 0, 32); cfg->scroll.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "ScrollRightButton", DEFAULT_SCROLL_RT_BTN), 0, 32); cfg->scroll_coast.min_speed = MAXVAL(xf86SetRealOption(opts, "ScrollCoastEnableSpeed", DEFAULT_SCROLL_COAST_MIN_SPEED), 0.0); cfg->scroll_coast.tick_ms = MAXVAL(DEFAULT_SCROLL_COAST_TICK_MS, 1); cfg->scroll_coast.num_of_ticks = MAXVAL(xf86SetRealOption(opts, "ScrollCoastDuration", DEFAULT_SCROLL_COAST_DURATION), 0.0) / cfg->scroll_coast.tick_ms; cfg->swipe3.dist = MAXVAL(xf86SetIntOption(opts, "SwipeDistance", DEFAULT_SWIPE_DIST), 1); cfg->swipe3.hold = MAXVAL(xf86SetIntOption(opts, "SwipeClickTime", DEFAULT_SWIPE_HOLD), 0); cfg->swipe3.drag_sens = MAXVAL(xf86SetIntOption(opts, "SwipeSensitivity", DEFAULT_SWIPE_SENS), 0); cfg->swipe3.up_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeUpButton", DEFAULT_SWIPE_UP_BTN), 0, 32); cfg->swipe3.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeDownButton", DEFAULT_SWIPE_DN_BTN), 0, 32); cfg->swipe3.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeLeftButton", DEFAULT_SWIPE_LT_BTN), 0, 32); cfg->swipe3.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "SwipeRightButton", DEFAULT_SWIPE_RT_BTN), 0, 32); cfg->swipe4.dist = MAXVAL(xf86SetIntOption(opts, "Swipe4Distance", DEFAULT_SWIPE4_DIST), 1); cfg->swipe4.hold = MAXVAL(xf86SetIntOption(opts, "Swipe4ClickTime", DEFAULT_SWIPE_HOLD), 0); cfg->swipe4.drag_sens = MAXVAL(xf86SetIntOption(opts, "Swipe4Sensitivity", DEFAULT_SWIPE_SENS), 0); cfg->swipe4.up_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4UpButton", DEFAULT_SWIPE4_UP_BTN), 0, 32); cfg->swipe4.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4DownButton", DEFAULT_SWIPE4_DN_BTN), 0, 32); cfg->swipe4.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4LeftButton", DEFAULT_SWIPE4_LT_BTN), 0, 32); cfg->swipe4.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Swipe4RightButton", DEFAULT_SWIPE4_RT_BTN), 0, 32); cfg->scale_dist = MAXVAL(xf86SetIntOption(opts, "ScaleDistance", DEFAULT_SCALE_DIST), 1); cfg->scale_up_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleUpButton", DEFAULT_SCALE_UP_BTN), 0, 32); cfg->scale_dn_btn = CLAMPVAL(xf86SetIntOption(opts, "ScaleDownButton", DEFAULT_SCALE_DN_BTN), 0, 32); cfg->rotate_dist = MAXVAL(xf86SetIntOption(opts, "RotateDistance", DEFAULT_ROTATE_DIST), 1); cfg->rotate_lt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateLeftButton", DEFAULT_ROTATE_LT_BTN), 0, 32); cfg->rotate_rt_btn = CLAMPVAL(xf86SetIntOption(opts, "RotateRightButton", DEFAULT_ROTATE_RT_BTN), 0, 32); cfg->hold1_move1_stationary.button = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move1StationaryButton", DEFAULT_HOLD1_MOVE1_STATIONARY_BTN), 0, 32); cfg->hold1_move1_stationary.max_move = MAXVAL(xf86SetIntOption(opts, "Hold1Move1StationaryMaxMove", DEFAULT_HOLD1_MOVE1_STATIONARY_MAX_MOVE), 1); cfg->hold1_move1.dist = MAXVAL(xf86SetIntOption(opts, "Hold1Move1Distance", DEFAULT_HOLD1_MOVE1_DIST), 1); cfg->hold1_move1.hold = MAXVAL(xf86SetIntOption(opts, "Hold1Move1ClickTime", DEFAULT_HOLD1_MOVE1_HOLD), 0); cfg->hold1_move1.drag_sens = MAXVAL(xf86SetIntOption(opts, "Hold1Move1Sensitivity", DEFAULT_HOLD1_MOVE1_SENS), 0); cfg->hold1_move1.up_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move1UpButton", DEFAULT_HOLD1_MOVE1_BTN), 0, 32); cfg->hold1_move1.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move1DownButton", DEFAULT_HOLD1_MOVE1_BTN), 0, 32); cfg->hold1_move1.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move1LeftButton", DEFAULT_HOLD1_MOVE1_BTN), 0, 32); cfg->hold1_move1.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move1RightButton", DEFAULT_HOLD1_MOVE1_BTN), 0, 32); #if 0 cfg->hold1_move2_stationary.button = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move2StationaryButton", DEFAULT_HOLD1_MOVE2_STATIONARY_BTN), 0, 32); cfg->hold1_move2_stationary.max_move = MAXVAL(xf86SetIntOption(opts, "Hold1Move2StationaryMaxMove", DEFAULT_HOLD1_MOVE2_STATIONARY_MAX_MOVE), 1); cfg->hold1_move2.dist = MAXVAL(xf86SetIntOption(opts, "Hold1Move2Distance", DEFAULT_HOLD1_MOVE2_DIST), 1); cfg->hold1_move2.hold = MAXVAL(xf86SetIntOption(opts, "Hold1Move2ClickTime", DEFAULT_HOLD1_MOVE2_HOLD), 0); cfg->hold1_move2.drag_sens = MAXVAL(xf86SetIntOption(opts, "Hold1Move2Sensitivity", DEFAULT_HOLD1_MOVE2_SENS), 0); cfg->hold1_move2.up_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move2UpButton", DEFAULT_HOLD1_MOVE2_BTN), 0, 32); cfg->hold1_move2.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move2DownButton", DEFAULT_HOLD1_MOVE2_BTN), 0, 32); cfg->hold1_move2.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move2LeftButton", DEFAULT_HOLD1_MOVE2_BTN), 0, 32); cfg->hold1_move2.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move2RightButton", DEFAULT_HOLD1_MOVE2_BTN), 0, 32); cfg->hold1_move3_stationary.button = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move3StationaryButton", DEFAULT_HOLD1_MOVE3_STATIONARY_BTN), 0, 32); cfg->hold1_move3_stationary.max_move = MAXVAL(xf86SetIntOption(opts, "Hold1Move3StationaryMaxMove", DEFAULT_HOLD1_MOVE3_STATIONARY_MAX_MOVE), 1); cfg->hold1_move3.dist = MAXVAL(xf86SetIntOption(opts, "Hold1Move3Distance", DEFAULT_HOLD1_MOVE3_DIST), 1); cfg->hold1_move3.hold = MAXVAL(xf86SetIntOption(opts, "Hold1Move3ClickTime", DEFAULT_HOLD1_MOVE3_HOLD), 0); cfg->hold1_move3.drag_sens = MAXVAL(xf86SetIntOption(opts, "Hold1Move3Sensitivity", DEFAULT_HOLD1_MOVE3_SENS), 0); cfg->hold1_move3.up_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move3UpButton", DEFAULT_HOLD1_MOVE3_BTN), 0, 32); cfg->hold1_move3.dn_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move3DownButton", DEFAULT_HOLD1_MOVE3_BTN), 0, 32); cfg->hold1_move3.lt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move3LeftButton", DEFAULT_HOLD1_MOVE3_BTN), 0, 32); cfg->hold1_move3.rt_btn = CLAMPVAL(xf86SetIntOption(opts, "Hold1Move3RightButton", DEFAULT_HOLD1_MOVE3_BTN), 0, 32); #endif cfg->drag_enable = xf86SetBoolOption(opts, "TapDragEnable", DEFAULT_DRAG_ENABLE); cfg->drag_timeout = MAXVAL(xf86SetIntOption(opts, "TapDragTime", DEFAULT_DRAG_TIMEOUT), 1); cfg->drag_wait = MAXVAL(xf86SetIntOption(opts, "TapDragWait", DEFAULT_DRAG_WAIT), 0); cfg->drag_dist = MAXVAL(xf86SetIntOption(opts, "TapDragDist", DEFAULT_DRAG_DIST), 0); cfg->axis_x_invert = xf86SetBoolOption(opts, "AxisXInvert", DEFAULT_AXIS_X_INVERT); cfg->axis_y_invert = xf86SetBoolOption(opts, "AxisYInvert", DEFAULT_AXIS_Y_INVERT); cfg->sensitivity = MAXVAL(xf86SetRealOption(opts, "Sensitivity", DEFAULT_SENSITIVITY), 0); }
static double calculate_pfactor(grib_context *ctx,const double* spectralField, long fieldTruncation, long subsetTruncation) { /*long n_vals = ((fieldTruncation+1)*(fieldTruncation+2));*/ long loop, index, m, n = 0; double pFactor, zeps = 1.0e-15; long ismin = (subsetTruncation+1), ismax = (fieldTruncation+1); double* weights, range, * norms; double weightedSumOverX = 0.0, weightedSumOverY = 0.0, sumOfWeights = 0.0, x, y; double numerator = 0.0, denominator = 0.0, slope; /* Catch corner case. See GRIB-172 */ if (ismax-ismin <= 1) { return 1; /* any value will do! we cannot do linear fit on a single point! */ } /* * Setup the weights */ range = (double) (ismax - ismin +1); weights = (double*) grib_context_malloc(ctx,(ismax+1)*sizeof(double)); for( loop = ismin; loop <= ismax; loop++ ) weights[loop] = range / (double) (loop-ismin+1); /* * Compute norms * Handle values 2 at a time (real and imaginary parts). */ norms = (double*) grib_context_malloc(ctx,(ismax+1)*sizeof(double)); for( loop = 0; loop < ismax+1; loop++ ) norms[loop] = 0.0; /* * Form norms for the rows which contain part of the unscaled subset. */ index = -2; for( m = 0; m < subsetTruncation; m++ ) { for( n = m; n <= fieldTruncation; n++ ) { index += 2; if( n >= subsetTruncation ) { norms[n] = MAXVAL(norms[n],fabs(spectralField[index])); norms[n] = MAXVAL(norms[n],fabs(spectralField[index+1])); } } } /* * Form norms for the rows which do not contain part of the unscaled subset. */ for( m = subsetTruncation; m <= fieldTruncation; m++ ) { for( n = m; n <= fieldTruncation; n++ ) { index += 2; norms[n] = MAXVAL(norms[n],fabs(spectralField[index])); norms[n] = MAXVAL(norms[n],fabs(spectralField[index+1])); } } /* * Ensure the norms have a value which is not too small in case of * problems with math functions (e.g. LOG). */ for( loop = ismin; loop <= ismax; loop++ ) { norms[loop] = MAXVAL(norms[loop],zeps); if( norms[loop] == zeps ) weights[loop] = 100.0 * zeps; } /* * Do linear fit to find the slope */ for( loop = ismin; loop <= ismax; loop++ ) { x = log( (double) (loop*(loop+1)) ); Assert( norms[loop] > 0 ); y = log( norms[loop] ); weightedSumOverX = weightedSumOverX + x * weights[loop]; weightedSumOverY = weightedSumOverY + y * weights[loop]; sumOfWeights = sumOfWeights + weights[loop]; } weightedSumOverX = weightedSumOverX / sumOfWeights; weightedSumOverY = weightedSumOverY / sumOfWeights; /* * Perform a least square fit for the equation */ for( loop = ismin; loop <= ismax; loop++ ) { x = log( (double)(loop*(loop+1)) ); y = log( norms[loop] ); numerator = numerator + weights[loop] * (y-weightedSumOverY) * (x-weightedSumOverX); denominator = denominator + weights[loop] * ((x-weightedSumOverX) * (x-weightedSumOverX)); } slope = numerator / denominator; grib_context_free(ctx,weights); grib_context_free(ctx,norms); pFactor = -slope; if( pFactor < -9999.9 ) pFactor = -9999.9; if( pFactor > 9999.9 ) pFactor = 9999.9; return pFactor; }
/*================================================================ * XmlBufferSetSize * * Increases or decreases buffer cap so that at least * 'new_length' bytes can be stored * * On error, m's fields do not change. * * returns: * UPNP_E_SUCCESS * UPNP_E_OUTOF_MEMORY * *=================================================================*/ static int XmlBufferSetSize( Pool * pool, XmlBuffer * m, IN size_t new_length ) { size_t diff; size_t alloc_len; char *temp_buf; if ( new_length > m->length ) // increase length { // need more mem? if ( new_length < m->capacity ) { return 0; // have enough mem; done } if (m->length == 0) { alloc_len = new_length + 1; temp_buf = PMALLOC(alloc_len); if ( temp_buf == NULL ) return XML_INSUFFICIENT_MEMORY; m->buf = temp_buf; m->capacity = alloc_len; return 0; } diff = new_length - m->length + 1; alloc_len = MAXVAL( m->size_inc, diff ) + m->capacity; } else // decrease length { assert( new_length <= m->length ); return 0; /* // if diff is 0..m->size_inc, don't PFREE if( ( m->capacity - new_length ) <= m->size_inc ) { return 0; } alloc_len = new_length + m->size_inc; */ } assert( alloc_len > new_length ); temp_buf = PREALLOC( m->buf, m->length, alloc_len ); if ( temp_buf == NULL ) { // try smaller size alloc_len = new_length + 1; temp_buf = PREALLOC( m->buf, m->length, alloc_len); if ( temp_buf == NULL ) { return XML_INSUFFICIENT_MEMORY; } } // save m->buf = temp_buf; m->capacity = alloc_len; return 0; }