[cairo] [PATCH 5/5] cairo-script: Rename struct member to avoid name collision on AIX

Bill Spitzak spitzak at gmail.com
Wed Jun 17 09:01:54 PDT 2015


It might be a good idea for the new variable name to contain the text "jmp"
so that a grep for "jmp" will find it as well as uses of setjmp and
longjmp. I would call it "jmp_buffer" (although "jmp_buf" and "jmpbuffer"
would also avoid the AIX problem).


On Wed, Jun 17, 2015 at 2:05 AM, Bryce Harrington <bryce at osg.samsung.com>
wrote:

> On AIX, the token jmpbuf is a pre-processor macro.
> cairo-script-scanner.c includes a private struct with a member named
> jmpbuf which gets renamed to __jmpbuf when AIX's sys/context.h has been
> included.
>
> While judicious ordering of includes might kludge around this problem
> (by causing all references to .jmpbuf to become .__jmpbuf), it's better
> to simply select a new name for the struct member that won't suffer the
> collision.
>
> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=89339
>
> Signed-off-by: Bryce Harrington <bryce at osg.samsung.com>
> ---
>  util/cairo-script/cairo-script-private.h |  2 +-
>  util/cairo-script/cairo-script-scanner.c | 74
> ++++++++++++++++----------------
>  2 files changed, 38 insertions(+), 38 deletions(-)
>
> diff --git a/util/cairo-script/cairo-script-private.h
> b/util/cairo-script/cairo-script-private.h
> index 6bf41b4..8d158d6 100644
> --- a/util/cairo-script/cairo-script-private.h
> +++ b/util/cairo-script/cairo-script-private.h
> @@ -435,7 +435,7 @@ union _csi_union_object {
>  };
>
>  struct _csi_scanner {
> -    jmp_buf jmpbuf;
> +    jmp_buf jump_buffer;
>      int depth;
>
>      int bind;
> diff --git a/util/cairo-script/cairo-script-scanner.c
> b/util/cairo-script/cairo-script-scanner.c
> index 980c608..3dfb3a9 100644
> --- a/util/cairo-script/cairo-script-scanner.c
> +++ b/util/cairo-script/cairo-script-scanner.c
> @@ -199,13 +199,13 @@ _buffer_grow (csi_t *ctx, csi_scanner_t *scan)
>      char *base;
>
>      if (_csi_unlikely (scan->buffer.size > INT_MAX / 2))
> -       longjmp (scan->jmpbuf,  _csi_error (CSI_STATUS_NO_MEMORY));
> +       longjmp (scan->jump_buffer,  _csi_error (CSI_STATUS_NO_MEMORY));
>
>      offset = scan->buffer.ptr - scan->buffer.base;
>      newsize = scan->buffer.size * 2;
>      base = _csi_realloc (ctx, scan->buffer.base, newsize);
>      if (_csi_unlikely (base == NULL))
> -       longjmp (scan->jmpbuf,  _csi_error (CSI_STATUS_NO_MEMORY));
> +       longjmp (scan->jump_buffer,  _csi_error (CSI_STATUS_NO_MEMORY));
>
>      scan->buffer.base = base;
>      scan->buffer.ptr  = base + offset;
> @@ -441,12 +441,12 @@ token_end (csi_t *ctx, csi_scanner_t *scan,
> csi_file_t *src)
>                                           &scan->procedure_stack,
>                                           &scan->build_procedure);
>                 if (_csi_unlikely (status))
> -                   longjmp (scan->jmpbuf, status);
> +                   longjmp (scan->jump_buffer, status);
>             }
>
>             status = csi_array_new (ctx, 0, &scan->build_procedure);
>             if (_csi_unlikely (status))
> -               longjmp (scan->jmpbuf, status);
> +               longjmp (scan->jump_buffer, status);
>
>             scan->build_procedure.type |= CSI_OBJECT_ATTR_EXECUTABLE;
>             return;
> @@ -454,7 +454,7 @@ token_end (csi_t *ctx, csi_scanner_t *scan, csi_file_t
> *src)
>             if (_csi_unlikely
>                 (scan->build_procedure.type == CSI_OBJECT_TYPE_NULL))
>             {
> -               longjmp (scan->jmpbuf, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
> +               longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>             }
>
>             if (scan->procedure_stack.len) {
> @@ -470,7 +470,7 @@ token_end (csi_t *ctx, csi_scanner_t *scan, csi_file_t
> *src)
>                 scan->build_procedure.type = CSI_OBJECT_TYPE_NULL;
>             }
>             if (_csi_unlikely (status))
> -               longjmp (scan->jmpbuf, status);
> +               longjmp (scan->jump_buffer, status);
>
>             return;
>         }
> @@ -480,19 +480,19 @@ token_end (csi_t *ctx, csi_scanner_t *scan,
> csi_file_t *src)
>         if (len >= 2 && s[1] == '/') { /* substituted name */
>             status = csi_name_new (ctx, &obj, s + 2, len - 2);
>             if (_csi_unlikely (status))
> -               longjmp (scan->jmpbuf, status);
> +               longjmp (scan->jump_buffer, status);
>
>             status = _csi_name_lookup (ctx, obj.datum.name, &obj);
>         } else { /* literal name */
>             status = csi_name_new (ctx, &obj, s + 1, len - 1);
>         }
>         if (_csi_unlikely (status))
> -           longjmp (scan->jmpbuf, status);
> +           longjmp (scan->jump_buffer, status);
>      } else {
>         if (! _csi_parse_number (&obj, s, len)) {
>             status = csi_name_new (ctx, &obj, s, len);
>             if (_csi_unlikely (status))
> -               longjmp (scan->jmpbuf, status);
> +               longjmp (scan->jump_buffer, status);
>
>             obj.type |= CSI_OBJECT_ATTR_EXECUTABLE;
>         }
> @@ -510,7 +510,7 @@ token_end (csi_t *ctx, csi_scanner_t *scan, csi_file_t
> *src)
>         status = scan_push (ctx, &obj);
>      }
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>  }
>
>  static void
> @@ -531,7 +531,7 @@ string_end (csi_t *ctx, csi_scanner_t *scan)
>                              scan->buffer.base,
>                              scan->buffer.ptr - scan->buffer.base);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>
>      if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL)
>         status = csi_array_append (ctx,
> @@ -540,7 +540,7 @@ string_end (csi_t *ctx, csi_scanner_t *scan)
>      else
>         status = scan_push (ctx, &obj);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>  }
>
>  static int
> @@ -588,7 +588,7 @@ hex_end (csi_t *ctx, csi_scanner_t *scan)
>                              scan->buffer.base,
>                              scan->buffer.ptr - scan->buffer.base);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>
>      if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL)
>         status = csi_array_append (ctx,
> @@ -597,7 +597,7 @@ hex_end (csi_t *ctx, csi_scanner_t *scan)
>      else
>         status = scan_push (ctx, &obj);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>  }
>
>  static void
> @@ -605,7 +605,7 @@ base85_add (csi_t *ctx, csi_scanner_t *scan, int c)
>  {
>      if (c == 'z') {
>         if (_csi_unlikely (scan->accumulator_count != 0))
> -           longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +           longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>
>         buffer_check (ctx, scan, 4);
>         buffer_add (&scan->buffer, 0);
> @@ -613,7 +613,7 @@ base85_add (csi_t *ctx, csi_scanner_t *scan, int c)
>         buffer_add (&scan->buffer, 0);
>         buffer_add (&scan->buffer, 0);
>      } else if (_csi_unlikely (c < '!' || c > 'u')) {
> -       longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +       longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>      } else {
>         scan->accumulator = scan->accumulator*85 + c - '!';
>         if (++scan->accumulator_count == 5) {
> @@ -641,7 +641,7 @@ base85_end (csi_t *ctx, csi_scanner_t *scan,
> cairo_bool_t deflate)
>      case 0:
>         break;
>      case 1:
> -       longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +       longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>         break;
>
>      case 2:
> @@ -670,14 +670,14 @@ base85_end (csi_t *ctx, csi_scanner_t *scan,
> cairo_bool_t deflate)
>                                          (Bytef *) scan->buffer.ptr -
> source,
>                                          len);
>         if (_csi_unlikely (status))
> -           longjmp (scan->jmpbuf, status);
> +           longjmp (scan->jump_buffer, status);
>      } else {
>         status = csi_string_new (ctx,
>                                  &obj,
>                                  scan->buffer.base,
>                                  scan->buffer.ptr - scan->buffer.base);
>         if (_csi_unlikely (status))
> -           longjmp (scan->jmpbuf, status);
> +           longjmp (scan->jump_buffer, status);
>      }
>
>      if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL)
> @@ -687,7 +687,7 @@ base85_end (csi_t *ctx, csi_scanner_t *scan,
> cairo_bool_t deflate)
>      else
>         status = scan_push (ctx, &obj);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>  }
>
>  static void
> @@ -764,7 +764,7 @@ base64_end (csi_t *ctx, csi_scanner_t *scan)
>                              scan->buffer.base,
>                              scan->buffer.ptr - scan->buffer.base);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>
>      if (scan->build_procedure.type != CSI_OBJECT_TYPE_NULL)
>         status = csi_array_append (ctx,
> @@ -773,7 +773,7 @@ base64_end (csi_t *ctx, csi_scanner_t *scan)
>      else
>         status = scan_push (ctx, &obj);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>  }
>
>  static void
> @@ -783,7 +783,7 @@ scan_read (csi_scanner_t *scan, csi_file_t *src, void
> *ptr, int len)
>      do {
>         int ret = csi_file_read (src, data, len);
>         if (_csi_unlikely (ret == 0))
> -           longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_READ_ERROR));
> +           longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_READ_ERROR));
>         data += ret;
>         len -= ret;
>      } while (_csi_unlikely (len));
> @@ -801,7 +801,7 @@ string_read (csi_t *ctx,
>
>      status = csi_string_new (ctx, obj, NULL, len);
>      if (_csi_unlikely (status))
> -       longjmp (scan->jmpbuf, status);
> +       longjmp (scan->jump_buffer, status);
>
>      if (compressed) {
>         uint32_t u32;
> @@ -1015,7 +1015,7 @@ scan_none:
>         case 157:
>         case 158:
>         case 159:
> -           longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +           longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>
>         case '#': /* PDF 1.2 escape code */
>             {
> @@ -1044,7 +1044,7 @@ scan_none:
>                 status = scan_push (ctx, &obj);
>             }
>             if (_csi_unlikely (status))
> -               longjmp (scan->jmpbuf, status);
> +               longjmp (scan->jump_buffer, status);
>         }
>      }
>      return;
> @@ -1135,7 +1135,7 @@ scan_string:
>             next = csi_file_getc (src);
>             switch (next) {
>             case EOF:
> -               longjmp (scan->jmpbuf, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
> +               longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>
>             case 'n':
>                 string_add (ctx, scan, '\n');
> @@ -1229,7 +1229,7 @@ scan_string:
>             break;
>         }
>      }
> -    longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +    longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT));
>
>  scan_hex:
>      buffer_reset (&scan->buffer);
> @@ -1276,10 +1276,10 @@ scan_hex:
>             break;
>
>         default:
> -           longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +           longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>         }
>      }
> -    longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +    longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT));
>
>  scan_base85:
>      buffer_reset (&scan->buffer);
> @@ -1306,7 +1306,7 @@ scan_base85:
>             break;
>         }
>      }
> -    longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +    longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT));
>
>  scan_base64:
>      buffer_reset (&scan->buffer);
> @@ -1324,14 +1324,14 @@ scan_base64:
>                 base64_end (ctx, scan);
>                 goto scan_none;
>             }
> -           longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +           longjmp (scan->jump_buffer, _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>
>         default:
>             base64_add (ctx, scan, c);
>             break;
>         }
>      }
> -    longjmp (scan->jmpbuf, _csi_error (CSI_STATUS_INVALID_SCRIPT));
> +    longjmp (scan->jump_buffer, _csi_error (CSI_STATUS_INVALID_SCRIPT));
>  }
>
>  static csi_status_t
> @@ -1396,7 +1396,7 @@ _csi_scan_file (csi_t *ctx, csi_file_t *src)
>       */
>
>      if (ctx->scanner.depth++ == 0) {
> -       if ((status = setjmp (ctx->scanner.jmpbuf))) {
> +       if ((status = setjmp (ctx->scanner.jump_buffer))) {
>             ctx->scanner.depth = 0;
>             return status;
>         }
> @@ -1759,7 +1759,7 @@ _translate_push (csi_t *ctx, csi_object_t *obj)
>      case CSI_OBJECT_TYPE_PATTERN:
>      case CSI_OBJECT_TYPE_SCALED_FONT:
>      case CSI_OBJECT_TYPE_SURFACE:
> -       longjmp (ctx->scanner.jmpbuf,  _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
> +       longjmp (ctx->scanner.jump_buffer,  _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>         break;
>      }
>
> @@ -1805,7 +1805,7 @@ _translate_execute (csi_t *ctx, csi_object_t *obj)
>      case CSI_OBJECT_TYPE_PATTERN:
>      case CSI_OBJECT_TYPE_SCALED_FONT:
>      case CSI_OBJECT_TYPE_SURFACE:
> -       longjmp (ctx->scanner.jmpbuf,  _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
> +       longjmp (ctx->scanner.jump_buffer,  _csi_error
> (CSI_STATUS_INVALID_SCRIPT));
>         break;
>      }
>
> @@ -1877,7 +1877,7 @@ _csi_translate_file (csi_t *ctx,
>      csi_status_t status;
>      struct _translate_closure translator;
>
> -    if ((status = setjmp (ctx->scanner.jmpbuf)))
> +    if ((status = setjmp (ctx->scanner.jump_buffer)))
>         return status;
>
>      status = build_opcodes (ctx, &translator.opcodes);
> --
> 1.9.1
>
> --
> cairo mailing list
> cairo at cairographics.org
> http://lists.cairographics.org/mailman/listinfo/cairo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.cairographics.org/archives/cairo/attachments/20150617/a94f7378/attachment-0001.html>


More information about the cairo mailing list