19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%{
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "aidl_language.h"
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "aidl_language_y.h"
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "search_path.h"
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h>
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h>
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern YYSTYPE yylval;
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// comment and whitespace handling
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// these functions save a copy of the buffer
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void begin_extra_text(unsigned lineno, which_extra_text which);
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void append_extra_text(char* text);
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic extra_text_type* get_extra_text(void);   // you now own the object
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                // this returns
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void drop_extra_text(void);
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// package handling
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void do_package_statement(const char* importText);
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define SET_BUFFER(t) \
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    do { \
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        yylval.buffer.lineno = yylineno; \
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        yylval.buffer.token = (t); \
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        yylval.buffer.data = strdup(yytext); \
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        yylval.buffer.extra = get_extra_text(); \
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } while(0)
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%}
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%option yylineno
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%option noyywrap
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%x COPYING LONG_COMMENT
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectidentifier  [_a-zA-Z][_a-zA-Z0-9\.]*
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectwhitespace  ([ \t\n\r]+)
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbrackets    \[{whitespace}?\]
3902822d059031d539f4b4b69ae0ee6c4ad52388f2Maurice Chuidvalue     (0|[1-9][0-9]*)
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%%
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\%\%\{              { begin_extra_text(yylineno, COPY_TEXT); BEGIN(COPYING); }
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<COPYING>\}\%\%     { BEGIN(INITIAL); }
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<COPYING>.*\n       { append_extra_text(yytext); }
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<COPYING>.*         { append_extra_text(yytext); }
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<COPYING>\n+        { append_extra_text(yytext); }
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\/\*                            { begin_extra_text(yylineno, (which_extra_text)LONG_COMMENT);
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                  BEGIN(LONG_COMMENT); }
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<LONG_COMMENT>[^*]*             { append_extra_text(yytext); }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<LONG_COMMENT>\*+[^/]           { append_extra_text(yytext); }
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<LONG_COMMENT>\n                { append_extra_text(yytext); }
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<LONG_COMMENT>\**\/             { BEGIN(INITIAL); }
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project^{whitespace}?import{whitespace}[^ \t\r\n]+{whitespace}?;  {
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                SET_BUFFER(IMPORT);
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                return IMPORT;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            }
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project^{whitespace}?package{whitespace}[^ \t\r\n]+{whitespace}?;  {
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                do_package_statement(yytext);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                SET_BUFFER(PACKAGE);
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                return PACKAGE;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                            }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project<<EOF>>             { yyterminate(); }
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\/\/.*\n            { begin_extra_text(yylineno, SHORT_COMMENT);
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                        append_extra_text(yytext); }
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{whitespace}    { /* begin_extra_text(yylineno, WHITESPACE);
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                    append_extra_text(yytext); */ }
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project;               { SET_BUFFER(';'); return ';'; }
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\{              { SET_BUFFER('{'); return '{'; }
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\}              { SET_BUFFER('}'); return '}'; }
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\(              { SET_BUFFER('('); return '('; }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project\)              { SET_BUFFER(')'); return ')'; }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project,               { SET_BUFFER(','); return ','; }
8102822d059031d539f4b4b69ae0ee6c4ad52388f2Maurice Chu=               { SET_BUFFER('='); return '='; }
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* keywords */
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectparcelable      { SET_BUFFER(PARCELABLE); return PARCELABLE; }
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinterface       { SET_BUFFER(INTERFACE); return INTERFACE; }
867db766c3fec2795b08d237f29b972f474983684bJoe Onoratoflattenable     { SET_BUFFER(FLATTENABLE); return FLATTENABLE; }
87fdfe2ff8c60c367a4eb7cecb4cbe1d62b41a8c20Joe Onoratorpc             { SET_BUFFER(INTERFACE); return RPC; }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectin              { SET_BUFFER(IN); return IN; }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectout             { SET_BUFFER(OUT); return OUT; }
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectinout           { SET_BUFFER(INOUT); return INOUT; }
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectoneway          { SET_BUFFER(ONEWAY); return ONEWAY; }
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{brackets}+     { SET_BUFFER(ARRAY); return ARRAY; }
9402822d059031d539f4b4b69ae0ee6c4ad52388f2Maurice Chu{idvalue}       { SET_BUFFER(IDVALUE); return IDVALUE; }
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{identifier}                                        { SET_BUFFER(IDENTIFIER); return IDENTIFIER; }
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{identifier}\<{whitespace}*{identifier}({whitespace}*,{whitespace}*{identifier})*{whitespace}*\>    {
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                                      SET_BUFFER(GENERIC); return GENERIC; }
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /* syntax error! */
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project.               { printf("UNKNOWN(%s)", yytext);
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  yylval.buffer.lineno = yylineno;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  yylval.buffer.token = IDENTIFIER;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  yylval.buffer.data = strdup(yytext);
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                  return IDENTIFIER;
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                }
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project%%
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// comment and whitespace handling
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextra_text_type* g_extraText = NULL;
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextra_text_type* g_nextExtraText = NULL;
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid begin_extra_text(unsigned lineno, which_extra_text which)
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    extra_text_type* text = (extra_text_type*)malloc(sizeof(extra_text_type));
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    text->lineno = lineno;
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    text->which = which;
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    text->data = NULL;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    text->len = 0;
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    text->next = NULL;
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g_nextExtraText == NULL) {
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_extraText = text;
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->next = text;
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_nextExtraText = text;
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid append_extra_text(char* text)
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g_nextExtraText->data == NULL) {
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->data = strdup(text);
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->len = strlen(text);
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char* orig = g_nextExtraText->data;
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        unsigned oldLen = g_nextExtraText->len;
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        unsigned len = strlen(text);
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->len += len;
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->data = (char*)malloc(g_nextExtraText->len+1);
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        memcpy(g_nextExtraText->data, orig, oldLen);
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        memcpy(g_nextExtraText->data+oldLen, text, len);
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_nextExtraText->data[g_nextExtraText->len] = '\0';
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        free(orig);
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextra_text_type*
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectget_extra_text(void)
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    extra_text_type* result = g_extraText;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_extraText = NULL;
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_nextExtraText = NULL;
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return result;
1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid drop_extra_text(void)
1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    extra_text_type* p = g_extraText;
1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    while (p) {
1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        extra_text_type* next = p->next;
1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        free(p->data);
1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        free(p);
1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        free(next);
1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_extraText = NULL;
1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_nextExtraText = NULL;
1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// package handling
1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================
1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectvoid do_package_statement(const char* importText)
1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (g_currentPackage) free((void*)g_currentPackage);
1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    g_currentPackage = parse_import_statement(importText);
1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// main parse function
1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ================================================
1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectchar const* g_currentFilename = NULL;
1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectchar const* g_currentPackage = NULL;
1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint yyparse(void);
1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint parse_aidl(char const *filename)
1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    yyin = fopen(filename, "r");
1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (yyin) {
1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char const* oldFilename = g_currentFilename;
1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        char const* oldPackage = g_currentPackage;
1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_currentFilename = strdup(filename);
1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_error = 0;
1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        yylineno = 1;
1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        int rv = yyparse();
1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g_error != 0) {
1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project            rv = g_error;
2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        }
2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        free((void*)g_currentFilename);
2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_currentFilename = oldFilename;
2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        if (g_currentPackage) free((void*)g_currentPackage);
2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        g_currentPackage = oldPackage;
2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return rv;
2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    } else {
2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        fprintf(stderr, "aidl: unable to open file for read: %s\n", filename);
2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 1;
2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
215