~ubuntu-branches/ubuntu/vivid/golang/vivid

« back to all changes in this revision

Viewing changes to src/pkg/syscall/mksyscall_windows.pl

  • Committer: Package Import Robot
  • Author(s): James Page
  • Date: 2013-08-20 14:06:23 UTC
  • mfrom: (14.1.23 saucy-proposed)
  • Revision ID: package-import@ubuntu.com-20130820140623-b414jfxi3m0qkmrq
Tags: 2:1.1.2-2ubuntu1
* Merge from Debian unstable (LP: #1211749, #1202027). Remaining changes:
  - 016-armhf-elf-header.patch: Use correct ELF header for armhf binaries.
  - d/control,control.cross: Update Breaks/Replaces for Ubuntu
    versions to ensure smooth upgrades, regenerate control file.

Show diffs side-by-side

added added

removed removed

Lines of Context:
118
118
        }
119
119
 
120
120
        # Decide which version of api is used: ascii or unicode.
121
 
        my $strconvfunc = $sysname !~ /W$/ ? "StringBytePtr" : "StringToUTF16Ptr";
 
121
        my $strconvfunc = $sysname !~ /W$/ ? "BytePtrFromString" : "UTF16PtrFromString";
 
122
        my $strconvtype = $sysname !~ /W$/ ? "*byte" : "*uint16";
122
123
 
123
124
        # Winapi proc address variable.
124
125
        $vars .= "\t$sysvarname = $modvname.NewProc(\"$sysname\")\n";
133
134
        }
134
135
        $text .= sprintf "func %s(%s)%s {\n", $func, join(', ', @in), $out;
135
136
 
 
137
        # Check if err return available
 
138
        my $errvar = "";
 
139
        foreach my $p (@out) {
 
140
                my ($name, $type) = parseparam($p);
 
141
                if($type eq "error") {
 
142
                        $errvar = $name;
 
143
                        last;
 
144
                }
 
145
        }
 
146
 
136
147
        # Prepare arguments to Syscall.
137
148
        my @args = ();
138
149
        my $n = 0;
141
152
                my ($name, $type) = parseparam($p);
142
153
                if($type =~ /^\*/) {
143
154
                        push @args, "uintptr(unsafe.Pointer($name))";
 
155
                } elsif($type eq "string" && $errvar ne "") {
 
156
                        $text .= "\tvar _p$n $strconvtype\n";
 
157
                        $text .= "\t_p$n, $errvar = $strconvfunc($name)\n";
 
158
                        $text .= "\tif $errvar != nil {\n\t\treturn\n\t}\n";
 
159
                        push @args, "uintptr(unsafe.Pointer(_p$n))";
 
160
                        $n++;
144
161
                } elsif($type eq "string") {
145
 
                        push @args, "uintptr(unsafe.Pointer($strconvfunc($name)))";
 
162
                        print STDERR "$ARGV:$.: $func uses string arguments, but has no error return\n";
 
163
                        $text .= "\tvar _p$n $strconvtype\n";
 
164
                        $text .= "\t_p$n, _ = $strconvfunc($name)\n";
 
165
                        push @args, "uintptr(unsafe.Pointer(_p$n))";
 
166
                        $n++;
146
167
                } elsif($type =~ /^\[\](.*)/) {
147
168
                        # Convert slice into pointer, length.
148
169
                        # Have to be careful not to take address of &a[0] if len == 0:
245
266
                                $failexpr = "!$name";
246
267
                        } elsif($name eq "err") {
247
268
                                $ret[$i] = "r1";
248
 
                                $failexpr = "int(r1) $failcond";
 
269
                                $failexpr = "r1 $failcond";
249
270
                        } else {
250
271
                                $failexpr = "$name $failcond";
251
272
                        }