~ubuntu-branches/ubuntu/wily/grub2/wily-proposed

« back to all changes in this revision

Viewing changes to kern/misc.c

  • Committer: Bazaar Package Importer
  • Author(s): Felix Zielcke, Robert Millan, Felix Zielcke
  • Date: 2010-01-26 19:26:25 UTC
  • mfrom: (1.13.8 upstream)
  • Revision ID: james.westby@ubuntu.com-20100126192625-coq6czap2ofjollf
Tags: 1.98~20100126-1
* New Bazaar snapshot.
  - Includes mipsel-yeeloong port.

[ Robert Millan ]
* config.in: Lower priority of grub2/linux_cmdline_default.

[ Felix Zielcke ]
* Drop `CFLAGS=-O0' workaround on powerpc. Should be fixed correctly now.
* Ship grub-bin2h and grub-script-check in grub-common.
* Terminate NEWS.Debian with a blank line like lintian would suggest
  if that check would be working correctly.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include <grub/i18n.h>
27
27
 
28
28
static int
 
29
grub_vsnprintf_real (char *str, grub_size_t n, const char *fmt, va_list args);
 
30
 
 
31
static int
29
32
grub_iswordseparator (int c)
30
33
{
31
34
  return (grub_isspace (c) || c == ',' || c == ';' || c == '|' || c == '&');
202
205
{
203
206
  int ret;
204
207
 
205
 
  ret = grub_vsprintf (0, fmt, args);
 
208
  ret = grub_vsnprintf_real (0, 0, fmt, args);
206
209
  grub_refresh ();
207
210
  return ret;
208
211
}
636
639
  return p;
637
640
}
638
641
 
639
 
int
640
 
grub_vsprintf (char *str, const char *fmt, va_list args)
 
642
static int
 
643
grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt, va_list args)
641
644
{
642
645
  char c;
643
 
  int count = 0;
 
646
  grub_size_t count = 0;
644
647
  auto void write_char (unsigned char ch);
645
648
  auto void write_str (const char *s);
646
649
  auto void write_fill (const char ch, int n);
648
651
  void write_char (unsigned char ch)
649
652
    {
650
653
      if (str)
651
 
        *str++ = ch;
 
654
        {
 
655
          if (count < max_len)
 
656
            *str++ = ch;
 
657
        }
652
658
      else
653
659
        grub_putchar (ch);
654
660
 
877
883
}
878
884
 
879
885
int
880
 
grub_sprintf (char *str, const char *fmt, ...)
 
886
grub_vsnprintf (char *str, grub_size_t n, const char *fmt, va_list ap)
 
887
{
 
888
  grub_size_t ret;
 
889
 
 
890
  if (!n)
 
891
    return 0;
 
892
 
 
893
  n--;
 
894
 
 
895
  ret = grub_vsnprintf_real (str, n, fmt, ap);
 
896
 
 
897
  return ret < n ? ret : n;
 
898
}
 
899
 
 
900
int
 
901
grub_snprintf (char *str, grub_size_t n, const char *fmt, ...)
881
902
{
882
903
  va_list ap;
883
904
  int ret;
884
905
 
885
906
  va_start (ap, fmt);
886
 
  ret = grub_vsprintf (str, fmt, ap);
 
907
  ret = grub_vsnprintf (str, n, fmt, ap);
 
908
  va_end (ap);
 
909
 
 
910
  return ret;
 
911
}
 
912
 
 
913
#define PREALLOC_SIZE 255
 
914
 
 
915
char *
 
916
grub_xvasprintf (const char *fmt, va_list ap)
 
917
{
 
918
  grub_size_t s, as = PREALLOC_SIZE;
 
919
  char *ret;
 
920
 
 
921
  while (1)
 
922
    {
 
923
      ret = grub_malloc (as + 1);
 
924
      if (!ret)
 
925
        return NULL;
 
926
 
 
927
      s = grub_vsnprintf_real (ret, as, fmt, ap);
 
928
      if (s <= as)
 
929
        return ret;
 
930
 
 
931
      grub_free (ret);
 
932
      as = s;
 
933
    }
 
934
}
 
935
 
 
936
char *
 
937
grub_xasprintf (const char *fmt, ...)
 
938
{
 
939
  va_list ap;
 
940
  char *ret;
 
941
 
 
942
  va_start (ap, fmt);
 
943
  ret = grub_xvasprintf (fmt, ap);
887
944
  va_end (ap);
888
945
 
889
946
  return ret;