Changeset 2999

Show
Ignore:
Timestamp:
02/18/03 19:20:21 (6 years ago)
Author:
miyoshi
Message:

* mw32font.c (mw32_wf_allocator_reserve): New function.
(mw32_wf_allocator_cancel): Ditto.
(mw32_set_windows_logical_font): Call mw32_wf_allocator_cancel()
instead of xfree().
(set_font_info): Allocate heap memory after set_ccl_method()
successfully has finished.
(mw32_find_ccl_program): Ditto.
(mw32_internal_add_font): Allocate memory chunk for pointers to
MW32LogicalFont.
(mw32_lf_allocator_reserve): New function.
(mw32_lf_allocater_cancel): Ditto.
(mw32_add_logical_font): Call mw32_lf_allocator_reserve() instead
of xmalloc().
(mw32_add_logical_font): Expand memory chunk if no space is left.
(mw32_delete_logical_font): Call mw32_lf_allocater_cancel()
instead of xfree().

* mw32font.h (struct MW32FontRequest): New member variable.

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • work/cvs2svn/src/ChangeLog.Meadow

    r2998 r2999  
     12003-02-18  MIYOSHI Masanori  <miyoshi@boreas.dti.ne.jp> 
     2 
     3        * mw32font.c (mw32_wf_allocator_reserve): New function. 
     4        (mw32_wf_allocator_cancel): Ditto. 
     5        (mw32_set_windows_logical_font): Call mw32_wf_allocator_cancel() 
     6        instead of xfree(). 
     7        (set_font_info): Allocate heap memory after set_ccl_method() 
     8        successfully has finished. 
     9        (mw32_find_ccl_program): Ditto. 
     10        (mw32_internal_add_font): Allocate memory chunk for pointers to 
     11        MW32LogicalFont. 
     12        (mw32_lf_allocator_reserve): New function. 
     13        (mw32_lf_allocater_cancel): Ditto. 
     14        (mw32_add_logical_font): Call mw32_lf_allocator_reserve() instead 
     15        of xmalloc(). 
     16        (mw32_add_logical_font): Expand memory chunk if no space is left. 
     17        (mw32_delete_logical_font): Call mw32_lf_allocater_cancel() 
     18        instead of xfree(). 
     19 
     20        * mw32font.h (struct MW32FontRequest): New member variable. 
     21 
    1222003-02-17  MIYOSHI Masanori  <miyoshi@boreas.dti.ne.jp> 
    223 
  • work/cvs2svn/src/mw32font.c

    r2998 r2999  
    115115 
    116116Lisp_Object Vmw32_windows_font_charset_database; 
     117 
     118static mw32_windows_font *mw32_wf_allocator_current_data = 0; 
     119static mw32_windows_font *mw32_wf_allocator_last_data = 0; 
     120 
     121static mw32_windows_font * 
     122mw32_wf_allocator_reserve (void) 
     123{ 
     124  if (!mw32_wf_allocator_current_data) 
     125    { 
     126      mw32_wf_allocator_last_data 
     127        = (mw32_windows_font *) xmalloc (sizeof (mw32_windows_font)); 
     128    } 
     129  else 
     130    { 
     131      mw32_wf_allocator_last_data = mw32_wf_allocator_current_data; 
     132      mw32_wf_allocator_current_data = 0; 
     133    } 
     134   
     135  return mw32_wf_allocator_last_data; 
     136} 
     137 
     138static void 
     139mw32_wf_allocator_cancel (void) 
     140{ 
     141  mw32_wf_allocator_current_data = mw32_wf_allocator_last_data; 
     142  mw32_wf_allocator_last_data = 0; 
     143} 
    117144 
    118145static void 
     
    330357} 
    331358 
    332 static void mw32_logfont_free(MW32LogicalFont *plf) 
     359static void mw32_logfont_free (MW32LogicalFont *plf) 
    333360{ 
    334361  mw32_windows_font *pwf = (mw32_windows_font*) plf->pphys; 
     
    336363  if (pwf->pfont != INVALID_HANDLE_VALUE) 
    337364    DeleteObject(pwf->pfont); 
    338   xfree(pwf); 
     365  mw32_wf_allocator_cancel (); 
    339366} 
    340367 
     
    367394 
    368395static int 
    369 mw32_set_windows_logical_font(struct frame *f, MW32LogicalFont *plf, 
    370                               LOGFONT *plogf) 
     396mw32_set_windows_logical_font (struct frame *f, MW32LogicalFont *plf, 
     397                              LOGFONT *plogf) 
    371398{ 
    372399  mw32_windows_font *pwf; 
    373400  HFONT hf; 
    374401 
    375   pwf = (mw32_windows_font*) xmalloc(sizeof(mw32_windows_font)); 
     402  pwf = mw32_wf_allocator_reserve (); 
    376403 
    377404  /* set attributes. */ 
    378   if (hf = CreateFontIndirect(plogf)) 
     405  if (hf = CreateFontIndirect (plogf)) 
    379406    { 
    380407      HWND hwnd; 
     
    392419        } 
    393420 
    394       hwnd = FRAME_MW32_WINDOW(f); 
     421      hwnd = FRAME_MW32_WINDOW (f); 
    395422      if (hwnd) 
    396         hdc = FRAME_HDC(f); 
     423        hdc = FRAME_HDC (f); 
    397424      else 
    398         hdc = GetDC(GetDesktopWindow()); 
    399  
    400       oldobj = SelectObject(hdc, hf); 
    401       flag = GetTextMetrics(hdc, &tm); 
    402       SelectObject(hdc, oldobj); 
     425        hdc = GetDC (GetDesktopWindow ()); 
     426 
     427      oldobj = SelectObject (hdc, hf); 
     428      flag = GetTextMetrics (hdc, &tm); 
     429      SelectObject (hdc, oldobj); 
    403430      if (!hwnd) 
    404         ReleaseDC(GetDesktopWindow(), hdc); 
     431        ReleaseDC (GetDesktopWindow (), hdc); 
    405432      else if (mhdc != INVALID_HANDLE_VALUE) 
    406433        { 
     
    426453  else 
    427454    { 
    428       xfree(pwf); 
     455      mw32_wf_allocator_cancel (); 
    429456      return 0; 
    430457    } 
     
    443470  { 
    444471    int i; 
    445     MW32_CHARMETRIC_INVALIDATE(pwf->cur_cm); 
    446     for (i = 0;i < (sizeof(pwf->cmcache) / sizeof(pwf->cmcache[0]));i++) 
    447       MW32_CHARMETRIC_INVALIDATE(pwf->cmcache[i]); 
     472    MW32_CHARMETRIC_INVALIDATE (pwf->cur_cm); 
     473    for (i = 0;i < (sizeof (pwf->cmcache) / sizeof (pwf->cmcache[0]));i++) 
     474      MW32_CHARMETRIC_INVALIDATE (pwf->cmcache[i]); 
    448475  } 
    449476 
     
    512539  bdffont* pbf = (bdffont*) plf->pphys; 
    513540 
    514   if(pbf != NULL) 
     541  if (pbf != NULL) 
    515542    { 
    516543      mw32_free_bdf_font(pbf); 
     
    673700    { 
    674701      int i; 
     702      struct ccl_program ccl_prog; 
    675703 
    676704      fontp->charset = CHAR_CHARSET(c); 
    677       fontp->font_encoder 
    678         = (struct ccl_program *) xmalloc (sizeof (struct ccl_program))
    679       if (!set_ccl_method(plf->ccl_method, fontp->font_encoder)) 
     705      if (!set_ccl_method (plf->ccl_method, &ccl_prog)) 
     706        fontp->font_encoder = NULL
     707      else 
    680708        { 
    681           xfree(fontp->font_encoder); 
    682           fontp->font_encoder = NULL; 
     709          fontp->font_encoder 
     710            = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); 
     711          *(fontp->font_encoder) = ccl_prog; 
    683712        } 
    684713      fontp->encoding[0] = fontp->encoding[1] = plf->encoding_type; 
     
    767796  MW32LogicalFont *plf; 
    768797  Lisp_Object encoding; 
     798  struct ccl_program ccl_prog; 
    769799 
    770800  plf = (MW32LogicalFont*) fontp->font; 
    771801  if (!plf) return; 
    772802 
    773   fontp->font_encoder 
    774     = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); 
    775   if (!set_ccl_method(plf->ccl_method, fontp->font_encoder)) 
    776     { 
    777       xfree(fontp->font_encoder); 
    778       fontp->font_encoder = NULL; 
     803  if (!set_ccl_method (plf->ccl_method, &ccl_prog)) 
     804    fontp->font_encoder = NULL; 
     805  else 
     806    { 
     807      fontp->font_encoder 
     808        = (struct ccl_program *) xmalloc (sizeof (struct ccl_program)); 
     809      *(fontp->font_encoder) = ccl_prog; 
    779810    } 
    780811  return; 
     
    815846      Vmw32_font_request_table = tem; 
    816847 
    817       mw32_fr_table = (MW32FontRequest*) xrealloc(mw32_fr_table, 
    818                                                   sizeof(MW32FontRequest) * newsize); 
     848      mw32_fr_table = (MW32FontRequest*) xrealloc (mw32_fr_table, 
     849                                                   sizeof(MW32FontRequest) 
     850                                                   * newsize); 
    819851    } 
    820852  AREF (Vmw32_font_request_table, idx) = alist; 
     
    822854  pfr->idx = idx; 
    823855  pfr->loaded_LF_num = 0; 
    824   pfr->pLFs = NULL; 
     856  pfr->num_pLFs = 4; 
     857  pfr->pLFs = (MW32LogicalFont**) xmalloc (sizeof (MW32LogicalFont *) 
     858                                           * pfr->num_pLFs); 
     859  bzero (pfr->pLFs, sizeof (MW32LogicalFont *) * pfr->num_pLFs); 
    825860  pfr->name = xstrdup(name); 
    826861 
     
    13761411                           LF loaders 
    13771412 ***********************************************************************/ 
     1413static MW32LogicalFont *mw32_lf_allocator_last_data = 0; 
     1414static MW32LogicalFont *mw32_lf_allocator_current_data = 0; 
     1415 
     1416static MW32LogicalFont * 
     1417mw32_lf_allocator_reserve (void) 
     1418{ 
     1419  if (!mw32_lf_allocator_current_data) 
     1420    { 
     1421      mw32_lf_allocator_last_data 
     1422        = (MW32LogicalFont *) xmalloc (sizeof (MW32LogicalFont)); 
     1423    } 
     1424  else 
     1425    { 
     1426      mw32_lf_allocator_last_data = mw32_lf_allocator_current_data; 
     1427      mw32_lf_allocator_current_data = 0; 
     1428    } 
     1429   
     1430  return mw32_lf_allocator_last_data; 
     1431} 
     1432 
     1433static void 
     1434mw32_lf_allocater_cancel (void) 
     1435{ 
     1436  mw32_lf_allocator_current_data = mw32_lf_allocator_last_data; 
     1437  mw32_lf_allocator_last_data = 0; 
     1438} 
    13781439 
    13791440int 
     
    14771538          mw32_plf_alloced_num *= 2; 
    14781539        } 
    1479       plf = (MW32LogicalFont*) xmalloc(sizeof(MW32LogicalFont)); 
     1540      plf = mw32_lf_allocator_reserve (); 
    14801541      mw32_plf_table[mw32_lf_num] = plf; 
    14811542      i = mw32_lf_num; 
     
    14891550          if (!*pplf) 
    14901551            { 
    1491               *pplf = plf = (MW32LogicalFont*) xmalloc(sizeof(MW32LogicalFont)); 
     1552              *pplf = plf = mw32_lf_allocator_reserve (); 
    14921553              break; 
    14931554            } 
     
    15021563  plf->hash = mw32_default_hash_function; 
    15031564 
    1504   pfr->pLFs = (MW32LogicalFont**) xrealloc(pfr->pLFs, 
    1505                                            sizeof(MW32LogicalFont*) 
    1506                                            * (pfr->loaded_LF_num + 1)); 
    1507   (pfr->pLFs)[pfr->loaded_LF_num++] = plf; 
     1565  if (pfr->num_pLFs < pfr->loaded_LF_num + 1) 
     1566    { 
     1567      pfr->num_pLFs *= 2; 
     1568      pfr->pLFs = (MW32LogicalFont**) xrealloc(pfr->pLFs, 
     1569                                               sizeof(MW32LogicalFont*) 
     1570                                               * (pfr->num_pLFs)); 
     1571    } 
     1572  pfr->pLFs[pfr->loaded_LF_num++] = plf; 
    15081573 
    15091574  mw32_lf_num++; 
     
    15531618 
    15541619  mw32_plf_table[plf->idx] = NULL; 
    1555   xfree(plf); 
     1620  mw32_lf_allocater_cancel (); 
    15561621  mw32_lf_num--; 
    15571622} 
  • work/cvs2svn/src/mw32font.h

    r2926 r2999  
    8282  int loaded_LF_num; 
    8383  MW32LogicalFont **pLFs; 
     84  int num_pLFs; 
    8485}; 
    8586